Bagaimana cara meminta jenis posting kustom dengan taksonomi kustom?

26

Untuk beberapa alasan saya merasa kesulitan untuk mengambil posting menggunakan taksonomi kustom ... adakah yang bisa mengungkap kebodohan saya?

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

query_posts($args); 

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

Deklarasi Taksonomi:

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
  ),
));
  }

Deklarasi Jenis Pos Kustom:

  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')
    )
);

}

Stephen
sumber

Jawaban:

37

Pertama-tama tidak query_posts()pernah digunakan , baca lebih lanjut di sini: Kapan Anda harus menggunakan WP_Query vs query_posts () vs get_posts ()? .

Anda harus menggunakan WP_Queryuntuk mengambil posting yang Anda butuhkan. Baca dokumentasi untuk itu. Dalam kasus Anda kueri bisa seperti ini:

$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();
Eugene Manuilov
sumber
2
Hanya perhatikan bahwa tampaknya menarik semua posting dengan jenis tulisan khusus 'Iklan'. Namun ini sepertinya berhasil: $ the_query = WP_Query baru (array ('post_type' => 'Adverts', 'advert_tag' => 'political'));
Stephen
@Stephen {pajak} sudah tidak digunakan lagi sejak versi 3.1 untuk {tax_query} dan {tax_query} diperkenalkan. ini masih berfungsi tetapi kita seharusnya tidak menggunakan fungsi yang sudah usang. tax_query digunakan dengan larik kueri taksonomi. saya sedang mengerjakan jenis Posting Kustom FAQs dan itu bekerja untuk saya dengan cara yang hampir sama dengan argumen {tax} slug taksonomi di WP_Query.
Aamer Shahzad
16

saya menggunakan kueri ini untuk mengambil kiriman khusus (Kiriman FAQ) dengan taksonomi khusus (faq_category). karena parameter {taxonomy} di WP_Query args sudah tidak digunakan lagi sejak v.3.1 dan memperkenalkan {tax_query}. di bawah ini adalah kode yang berfungsi dengan sempurna.

$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();
Aamer Shahzad
sumber
Ini adalah jawaban yang benar - jawaban yang diterima tidak akan difilter berdasarkan taksonomi karena tax_query membutuhkan array array. Metode bersarang ini sangat penting untuk membuatnya bekerja. Terima kasih atas jawaban Anda)
Tom Dyer
ya Anda benar, selamat datang Tom Dyer
Aamer Shahzad
Ya, ini juga membantu saya membuat templat taksonomi berfungsi. Terima kasih!
user3135691
Hai @AamerShahzad, saya memiliki pertanyaan yang sama persis dan saya menggunakan jawaban Anda tetapi halaman tersebut tidak menarik tulisan. Bisakah Anda membantu saya di sini? stackoverflow.com/questions/55783769/…
Desi
-1

Jawaban ini sekarang tidak berlaku lagi karena wordpress mengubah informasi parameter taksonomi mereka. silakan gunakan cara ini. Itu akan berhasil. Ini bekerja untuk saya. "tax_query" diganti dengan "pajak". berharap ini akan berhasil.

$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();
mamunuzaman
sumber
Itu kebalikannya - taxadalah cara lama, tax_queryadalah cara saat ini (v3.1 +).
WebElaine
Yah saya bekerja v4.5 dan bekerja dengan saya
mamunuzaman
WP terkenal karena kompatibel dengan mundur. Cara lama masih berfungsi, tetapi sudah tidak digunakan lagi, jadi akhirnya bisa dihapus dan lebih aman menggunakan metode yang lebih baru.
WebElaine