Cum să filtrezi tipurile de postări personalizate după taxonomia de categorii personalizate
Folosesc WordPress 4.6.1 și încerc să învăț cum să filtrez tipurile de postări personalizate după un proces de taxonomie pentru categorii. Acest lucru este foarte util deoarece persoanele non-tehnice pot filtra ușor postările de tip personalizat după categorie în panoul de administrare.
Aceasta este configurația mea...
Construiesc o temă copil bazată pe twentysixteen
Am creat și înregistrat un tip de postare personalizat în fișierul functions.php al temei copil astfel...
add_action('init','prowp_register_my_post_types'); function prowp_register_my_post_types() { register_post_type('products', array( 'labels' => array ( 'name' => 'Products', 'singular_name' => 'Product', 'add_new' => 'Add New Product', 'add_new_item' => 'Add New Product', 'edit_item' => 'Edit this Product', 'new_item' => 'New Product', 'all_items' => 'All My Products' ), 'public' => true, 'show_ui' => true, 'taxonomies' => array ( 'category' ), 'supports' => array ( 'title', 'revisions', 'editor', 'thumbnail', 'page-attributes', 'custom-fields') )); }
Acum folosesc tipul de postare personalizat înregistrat în fișierul index.php al temei copil astfel:
$pargs = array( 'post_per_page' => '-1', 'post_type' => 'products', 'tax_query' => array( 'taxonomy' => 'category', 'field' => 'slug', 'terms' => 'Specials' ) ); $myProducts = new WP_Query($pargs); while ( $myProducts->have_posts() ) : $myProducts->the_post(); get_template_part('template-parts/products',get_post_format()); endwhile; rewind_posts(); wp_reset_postdata();
În final, din wp-admin, am creat apoi postările pentru tipul de postare personalizat și am atribuit categoria "Specials" la "una" dintre postările mele. Celelalte sunt necategorizate. Și fiecare pagină este publicată.
...Dar din anumite motive, pagina mea din browser listează toate postările din acest tip de postare personalizat, și nu doar pe cele din Specials. Fac ceva greșit?
Faci o mică greșeală în $pargs
-ul tău
Notă importantă: tax_query primește un array de array-uri cu argumente pentru taxonomii (primește un array de array-uri). De asemenea, ai folosit "post_per_page" în loc de "posts_per_page"
$pargs = array(
'posts_per_page' => '-1',
'post_type' => 'products',
'tax_query' => array(
array(
'taxonomy' => 'category',
'field' => 'slug',
'terms' => 'specials'
)
)
)

Puteți încerca cu următoarele coduri:
$terms = wp_get_post_terms( $post->ID, array('category') );
$term_slugs = wp_list_pluck( $terms, 'slug' );
$args = array(
'post_per_page' => '-1',
'post_type' => array( 'products' ),
'tax_query' => array(
array(
'taxonomy' => 'category',
'field' => 'slug',
'terms' => $term_slugs
)
);
$my_query = null;
$my_query = new WP_Query($args);
