ฉันจะค้นหาประเภทโพสต์ที่กำหนดเองด้วย taxonomy ที่กำหนดเองได้อย่างไร


26

ด้วยเหตุผลบางอย่างฉันพบว่ามันยากที่จะคว้าโพสต์ใด ๆ โดยใช้ taxonomy ที่กำหนดเอง ... ทุกคนสามารถแก้ความโง่เขลาของฉันได้ไหม?

 $args = array(
    'post_type' => 'adverts',
    'advert_tag' => 'politics' // Doesn't seem to work.
  );

query_posts($args); 

while ( have_posts() ) : the_post();
 //Show Posts
endwhile;

การประกาศ Taxonomy:

add_action( 'init', 'add_custom_taxonomy', 0 );
function add_custom_taxonomy() {
register_taxonomy('advert_tag', 'Adverts', array(
  'hierarchical' => true,
  'labels' => array(
    'name' => _x( 'Advert Tags', 'taxonomy general name' ),
    'singular_name' => _x( 'Advert Tag', 'taxonomy singular name' ),
    'search_items' =>  __( 'Search Advert Tags' ),
    'all_items' => __( 'All Advert Tags' ),
    'parent_item' => __( 'Parent Advert Tag' ),
    'parent_item_colon' => __( 'Parent Advert Tag:' ),
    'edit_item' => __( 'Edit Advert Tag' ),
    'update_item' => __( 'Update Advert Tag' ),
    'add_new_item' => __( 'Add New Advert Tag' ),
    'new_item_name' => __( 'New Advert Tag Name' ),
    'menu_name' => __( 'Advert Tags' ),
  ),
  'rewrite' => array(
    'slug' => 'advert-tags',
    'with_front' => false,
    'hierarchical' => true
  ),
));
  }

ประกาศประเภทโพสต์ที่กำหนดเอง:

  add_action( 'init', 'create_post_type' );
  function create_post_type() {
    register_post_type( 'Adverts',
    array(
        'labels' => array(
            'name' => __( 'Adverts' ),
            'singular_name' => __( 'Advert'),
            'add_new' => __( 'Add New' ),
            'add_new_item' => __( 'Add a New Advert' ),
            'edit' => __( 'Edit' ),
            'edit_item' => __( 'Edit Advert' ),
            'new_item' => __( 'New Advert' ),
            'view' => __( 'View' ),
            'view_item' => __( 'View Advert' ),
            'search_items' => __( 'Search Adverts' ),
            'not_found' => __( 'No Adverts found' ),
            'not_found_in_trash' => __( 'No Adverts found in Trash' ),
            ),
        'supports' => array(
                'title',
                'thumbnail',
            ),
        'has_archive' => true,
        'menu_position' => 10,
        'public' => true,
        'rewrite' => array( 'slug' => 'adverts' ),
        'taxonomies' => array('advert_tag')
    )
);

}

คำตอบ:


37

FIRS จากทั้งหมดไม่ได้ใช้query_posts()เคยอ่านเพิ่มเติมเกี่ยวกับที่นี่: เมื่อใดที่คุณควรใช้ WP_Query vs query_posts () vs get_posts ()? .

คุณต้องใช้WP_Queryเพื่อดึงโพสต์สิ่งที่คุณต้องการ อ่านเอกสารสำหรับมัน ในกรณีของคุณการสืบค้นอาจเป็นดังนี้:

$the_query = new WP_Query( array(
    'post_type' => 'Adverts',
    'tax_query' => array(
        array (
            'taxonomy' => 'advert_tag',
            'field' => 'slug',
            'terms' => 'politics',
        )
    ),
) );

while ( $the_query->have_posts() ) :
    $the_query->the_post();
    // Show Posts ...
endwhile;

/* Restore original Post Data 
 * NB: Because we are using new WP_Query we aren't stomping on the 
 * original $wp_query and it does not need to be reset.
*/
wp_reset_postdata();

2
เพิ่งสังเกตว่าดูเหมือนจะดึงโพสต์ทั้งหมดด้วยโพสต์ที่กำหนดเองประเภท 'โฆษณา' อย่างไรก็ตามสิ่งนี้ดูเหมือนว่าจะทำงาน: $ the_query = new WP_Query (อาร์เรย์ ('post_type' => 'โฆษณา', 'advert_tag' => 'การเมือง'));
สตีเฟ่น

@Stephen {tax} เลิกใช้แล้วตั้งแต่เวอร์ชัน 3.1 เพื่อให้เป็นที่รู้จักในเรื่อง {tax_query} และ {tax_query} ยังใช้งานได้ แต่เราไม่ควรใช้ฟังก์ชั่นที่เลิกใช้แล้ว tax_query ใช้กับอาร์เรย์ของเคียวรี taxonomy ฉันกำลังทำงานเกี่ยวกับคำถามที่พบบ่อยประเภทโพสต์ที่กำหนดเองและมันทำงานได้ดีสำหรับฉันแบบเดียวกับอาร์กิวเมนต์ {tax} taxonomy กระสุนใน WP_Query
Aamer Shahzad

16

ฉันใช้การค้นหานี้เพื่อดึงข้อมูลโพสต์ที่กำหนดเอง (โพสต์คำถามที่พบบ่อย) ด้วยอนุกรมวิธานที่กำหนดเอง (faq_category) เนื่องจากพารามิเตอร์ {taxonomy} ใน WP_Query args เลิกใช้แล้วตั้งแต่ v.3.1 และแนะนำ {tax_query} ด้านล่างเป็นรหัสที่ทำงานได้อย่างสมบูรณ์

$query = new WP_Query( array(
    'post_type' => 'faqs',          // name of post type.
    'tax_query' => array(
        array(
            'taxonomy' => 'faq_category',   // taxonomy name
            'field' => 'term_id',           // term_id, slug or name
            'terms' => 48,                  // term id, term slug or term name
        )
    )
) );

while ( $query->have_posts() ) : $query->the_post();
    // do stuff here....
endwhile;

/**
 * reset the orignal query
 * we should use this to reset wp_query
 */
wp_reset_query();

นี่คือคำตอบที่ถูกต้อง - คำตอบที่ยอมรับจะไม่กรองตาม taxonomy เนื่องจาก tax_query ต้องใช้อาร์เรย์ วิธีการซ้อนกันนี้มีความสำคัญต่อการทำให้สิ่งนี้ทำงานได้ ขอบคุณสำหรับคำตอบของคุณ)
Tom Dyer

ใช่คุณพูดถูกยินดีต้อนรับ Tom Dyer
Aamer Shahzad

ใช่อันนี้ก็ช่วยให้ฉันได้รับแม่แบบ taxonomies ไปใช้งาน ขอขอบคุณ!
user3135691

เฮ้ @AamerShahzad ฉันมีคำถามเดียวกันแน่นอนและฉันใช้คำตอบของคุณ แต่หน้านี้ไม่มีการโพสต์ คุณช่วยฉันออกจากที่นี่ได้ไหม stackoverflow.com/questions/55783769/…
Desi

-1

คำตอบนี้ไม่ถูกต้องอีกต่อไปเนื่องจาก wordpress เปลี่ยนข้อมูลพารามิเตอร์ taxonomy โปรดใช้วิธีนี้ มันจะทำงาน. มันใช้งานได้สำหรับฉัน "tax_query" แทนที่ด้วย "tax" หวังว่ามันจะทำงาน

$the_query = new WP_Query( array(
    'post_type' => 'Adverts',
    'tax' => array(
        array (
            'taxonomy' => 'advert_tag',
            'field' => 'slug',
            'terms' => 'politics',
        )
    ),
) );

while ( $the_query->have_posts() ) :
    $the_query->the_post();
    // Show Posts ...
endwhile;

/* Restore original Post Data 
 * NB: Because we are using new WP_Query we aren't stomping on the 
 * original $wp_query and it does not need to be reset.
*/
wp_reset_postdata();

มันตรงกันข้ามกัน - taxเป็นวิธีเก่าtax_queryคือวิธีปัจจุบัน (v3.1 +)
WebElaine

ดีฉันทำงาน v4.5 และใช้งานได้กับฉัน
mamunuzaman

WP มีชื่อเสียงในด้านความเข้ากันได้แบบย้อนหลัง วิธีการเดิมยังคงใช้งานได้ แต่ถูกเลิกใช้แล้วดังนั้นจึงอาจถูกลบออกไปในที่สุดและปลอดภัยกว่าที่จะใช้วิธีการใหม่กว่า
WebElaine
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.