类别页面不应显示子类别

Category page should not display child categories

我需要 Wordpress 的每个类别只显示自己的帖子,而不显示其子类别的帖子。这是怎么做到的?

我需要子类别中的帖子只出现在它们的子类别中而不出现在父类别中(我只想看到标记为该父类别的帖子。 但是,在父类别中,我得到所有标记为出现在该父类别的子类别中的帖子。

例如,如果我有类别 "cars" 并且在其下方有子类别 "Fiat"、福特"、"Honda",我会在子类别 "Fiat" 中看到菲亚特帖子] 和父类别 "Cars".

我们如何解决这个问题?

仅适用于 WordPress >= 3.3

在您的 functions.php 主题文件中:

add_filter('pre_get_posts','hide_subcategories_function',20,1);

function hide_subcategories_function($the_query) {
    if(get_bloginfo('version') >= 3.3 && function_exists('is_main_query')) {

        if(!$the_query->is_admin && !$the_query->is_preview && $the_query->query_vars['suppress_filters'] == false && $the_query->is_category && $the_query->is_main_query()) {

            $cat = get_term_by( 'slug', $the_query->query_vars['category_name'], 'category');

            $the_query->set('category__in',array($cat->term_id));

        }

    }
    return $the_query ;
}

利用parse_tax_query action排除当前类别children

您可以尝试这样的操作:(需要 php 5.3 +)

add_action( 'parse_tax_query', function ( $query ) {
    if ( 
        ! is_admin() 
        && $query->is_main_query()
        && $query->is_category()
    ) {
        $query->tax_query->queries[0]['include_children'] = 0;
    }
});