私は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」を自分の投稿の「one」に割り当てました。その他は未分類です。そして、すべてのページが公開されています。
...しかし、どういうわけか、私のブラウザページはこのカスタム投稿タイプからのすべての私の投稿をリストしています、そしてSpecialsだけではない。私は何か問題がありますか?
あなたはあなたの$pargs
でちょっとした間違いをしています
重要な注意: tax_queryはtaxクエリ引数配列の配列を取ります(配列の配列を取ります)。また、 "posts_per_page"の代わりに "post_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);