不遵守‘INCLUDE_CHILD’=>‘FALSE’的自定义分类模板

时间:2016-09-14 作者:CalvT

我已经为自定义帖子类型创建了一个自定义分类法,并为其创建了一个自定义页面。

问题是我只想显示属于该类别的自定义帖子,而不想显示子类别中的帖子。因此,我为循环编写了以下查询:

<?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 个回复
SO网友:hkchakladar

尝试以下操作:

正如@gdaniel所说,您给出的是一个字符串来代替布尔值。代替\'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\' );

SO网友:Jesse Sutherland

在这些答案中,有很多是硬编码的,我觉得这些答案可能会在以后的道路上有缺点。这里有一种方法,它接受现有的tax\\u查询,并替换掉“include\\u children”参数。

顺便说一句,在这个例子中,我没有运气将“include\\u 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 );

SO网友:cjbj

您已使用\'include_children\' => \'false\', 但你还没告诉WordPresswhich taxonomy this is about 也不是你不想要孩子的基本类别。您可以按如下方式进行操作:

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;

相关推荐

Updating modified templates

我想调整一些。php模板文件在我的WordPress主题中,我知道正确的过程是将相关文件复制到子主题文件夹中并在那里编辑文件,这样我的修改就不会在将来的主题更新中丢失。但这是否意味着我将无法从主题更新中获益,因为我将文件放在了我的子主题文件夹中?这可能不是一件好事,因为主题更新可能添加了一些有用的特性,甚至修复了我最初需要对代码进行调整的问题!这方面的常见解决方案是什么?有人推荐了一款Diff应用程序——这是人们常用的吗?