web-dev-qa-db-ja.com

カスタム分類テンプレートが 'include_children'を尊重していない=> 'false'

カスタム投稿タイプ用にカスタム分類法を作成し、それにカスタムページを作成しました。

問題は、カテゴリの一部であるカスタム投稿のみを表示し、サブカテゴリからの投稿は表示しないことです。それで、私はループのために以下の質問を書きました:

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

どこが間違っていますか?

3
CalvT

これを試して:

  1. @ gdanielが言ったように、あなたはブール値の代わりに文字列を与えています。 'include_children' => 'false''include_children' => falseに置き換えます(falseから引用符を削除します)
  2. 投稿を取得する前に 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' );
1
hkchakladar

あなたは'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;
0
cjbj

これらの答えの多くにはハードコーディングが多く続いていましたが、今後さらに不利な点があると思いました。これは既存の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 );
0