Как фильтровать произвольные типы записей по пользовательской таксономии категорий
Я использую WordPress 4.6.1 и пытаюсь разобраться, как фильтровать произвольные типы записей по таксономии категорий. Это очень удобно, так как нетехнические пользователи могут легко фильтровать записи произвольного типа по категориям в админ-панели.
Вот моя настройка...
Я создаю дочернюю тему на основе tweentysixteen
Я создал и зарегистрировал произвольный тип записи в файле functions.php дочерней темы следующим образом...
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') )); }
Теперь я использую зарегистрированный произвольный тип записи в файле index.php дочерней темы следующим образом:
$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();
Наконец, в wp-admin я создал записи произвольного типа и назначил категорию "Specials" одной из моих записей. Остальные остались без категории. И все страницы опубликованы.
...Но почему-то мой браузер показывает все записи этого произвольного типа, а не только из категории Specials. Что я делаю не так?
Вы делаете небольшую ошибку в вашем $pargs
Важное примечание: tax_query принимает массив аргументов таксономического запроса (он принимает массив массивов). Также у вас указано "post_per_page" вместо "posts_per_page"
$pargs = array(
'posts_per_page' => '-1',
'post_type' => 'products',
'tax_query' => array(
array(
'taxonomy' => 'category',
'field' => 'slug',
'terms' => 'specials'
)
)
)

Вы можете попробовать следующий код:
$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);
