カスタム投稿タイプ用にカスタム分類法を作成し、それにカスタムページを作成しました。
問題は、カテゴリの一部であるカスタム投稿のみを表示し、サブカテゴリからの投稿は表示しないことです。それで、私はループのために以下の質問を書きました:
<?php global $wp_query;
$args = array_merge( $wp_query->query_vars, array( 'post_type' => 'product', 'include_children' => 'false' ) );
query_posts( $args );
if(have_posts()) : while(have_posts()) : the_post(); ?>
'include_children' => 'false'
は$args
に含まれていますが、それでもサブカテゴリからの商品を示しています。私はそれを'post_parent' => 0
に変更し、両方を同時に使用しようとしましたが、役に立ちませんでした。
これが私の分類法のコードです。
function productcat_taxonomy() {
$labels = array(
'name' => _x( 'Product Categories', 'taxonomy general name' ),
'singular_name' => _x( 'Product Category', 'taxonomy singular name' ),
'search_items' => __( 'Search Product Categories' ),
'all_items' => __( 'All Product Categories' ),
'parent_item' => __( 'Parent Product Category' ),
'parent_item_colon' => __( 'Parent Product Category:' ),
'edit_item' => __( 'Edit Product Category' ),
'update_item' => __( 'Update Product Category' ),
'add_new_item' => __( 'Add New Product Category' ),
'new_item_name' => __( 'New Product Category Name' ),
'menu_name' => __( 'Product Categories' ),
);
register_taxonomy('product-category',array('product'), array(
'hierarchical' => true,
'labels' => $labels,
'show_ui' => true,
'show_admin_column' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'product-category' ),
));
}
add_action( 'init', 'productcat_taxonomy', 0 );
どこが間違っていますか?
これを試して:
'include_children' => 'false'
を'include_children' => false
に置き換えます(false
から引用符を削除します)pre_get_posts
にフックしてクエリ変数を変更することができます。カスタム分類テンプレートページの場合は、カスタムクエリをグローバルクエリに含めます。これはテーマfunctions.php
に行きますfunction wpse239243_exclude_child( $query ) {
//if on frontend custom taxonomy template
if( $query->is_tax( 'product-category' ) && $query->is_main_query() && !is_admin() ) {
$tax_query = array( array(
'taxonomy' => 'product-category',
'terms' => $query->get( 'product-category' ),
'include_children' => false
) );
$query->set( 'tax_query', $tax_query );
}
}
add_action( 'pre_get_posts', 'wpse239243_exclude_child' );
あなたは'include_children' => 'false'
を使ったことがありますが、WordPress これはどの分類学についてのものであるか と言っていません。次のようにします。
array(
'post_type' => 'product',
'tax_query' => array( array(
'taxonomy' => 'product-category',
'include_children' => 'false'
'terms' => 'base-category-ID',
) ),
);
固定のbase-category-ID
の代わりに、現在の投稿の最初のカテゴリの名前を含む変数をもちろん使うことができます。
$categories = get_the_category();
$category_id = $categories[0]->cat_ID;
これらの答えの多くにはハードコーディングが多く続いていましたが、今後さらに不利な点があると思いました。これは既存のtax_queryを取り、 "include_children"引数を交換するアプローチです。
余談ですが、この例では "include_children"をfalseに設定する運はありませんでした。私は働くためにゼロを見つけただけです。
function wpse239243_exclude_child_taxonomies( $query ) {
if ( ! is_admin() && $query->is_main_query() ) {
if (is_tax('product-category')) {
$tax_query = $query->tax_query->queries;
$tax_query[0]['include_children'] = 0;
$query->set( 'tax_query', $tax_query );
}
}
return;
}
add_action( 'pre_get_posts', 'wpse239243_exclude_child_taxonomies', 1 );