【问题标题】:Category page should not display child categories类别页面不应显示子类别
【发布时间】:2015-02-09 17:33:09
【问题描述】:

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

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

例如,如果我有“汽车”类别,并且在其下方有“菲亚特”、“福特”、“本田”子类别,我会在子类别“菲亚特”和父类别“汽车”中看到菲亚特帖子。

我们如何解决这个问题?

【问题讨论】:

    标签: wordpress


    【解决方案1】:

    利用parse_tax_query action 排除当前类别的子项

    你可以试试这样的:(需要 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;
        }
    });
    

    【讨论】:

    • 谢谢。这是有效的!不幸的是,我还不能投票,因为我的“声誉得分”不够高,但一旦达到,我就会投票给这个答案。谢谢。这是有效的!
    【解决方案2】:

    仅适用于 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 ;
    }
    

    【讨论】:

    • 非常感谢您的回答。但是,使用 functions.php 文件中的这段代码,当我尝试进入类别页面时会出现空白屏幕。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-07
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 2014-11-24
    • 2012-03-08
    • 2017-05-13
    相关资源
    最近更新 更多