从查询中删除类别(显示Archive.php中的所有帖子)pre_get_post()

时间:2014-01-29 作者:Bill

我正在使用pre_get_posts() 允许在任何类别存档上显示所有帖子。这是因为我将提供一个使用同位素的javascript排序和过滤方法。js。任何类别页面都将输出所有帖子,但任何不属于该类别的帖子最初都将被隐藏。

function show_all_cats( $query ) {
    if ( !$query->is_main_query() ){
        return;
    }
    if ( is_admin() ){
        return;
    }
    if ( $query->is_archive ) {
        $query->set(\'cat\', \'\'); //here is the problem
        var_dump($query);
        return;
    }
    return;
}
add_action( \'pre_get_posts\', \'show_all_cats\' );
我试过设置\'cat\'0, null, \'\'\'-\' . $currentcategoryid.它们要么只显示将以其他方式显示的帖子(全部在类别中),要么不显示。

我试过使用query_posts() 这也没用。我还被告知:

操作分类可能需要重新运行元查询处理。

4 个回复
SO网友:Otto

仅仅取消设置cat变量可能是不够的。这个pre_get_posts 钩子发生在查询变量已经被解析之后。因此,可能有一个tax\\u查询,分类法=类别,术语=您的类别。

您已经在代码中转储了$查询,可能是为了调试。那么,看看你实际上在倾倒什么。是否看到tax\\u查询?更改代码以调整$查询,使其符合您的要求。

SO网友:Tom J Nowell

你试过这个吗?

unset( $query->query_vars[\'cat\'] );

SO网友:Attila

您可以使用过滤器pre_get_posts() 要修改SQL查询,请执行以下操作:

add_filter( \'posts_where\', function ( $where ) {
    $where = preg_replace("regex pattern", "", $where);
        return $where;
    }, 10, 2 );
这是一个有点黑客攻击的解决方案,但应该是可行的。

SO网友:karlosuccess

大约4年后,如果有人需要答案,这就是解决方案:

if ( $query->is_archive ) {
    $q->set( \'category_name\', \'*your-category-slug*\' );
}
干杯

结束

相关推荐

Copy post taxonomy?

我是Wordpress的新手,我想做的是:创建一个分类法(课程),该分类法与POST一样有效,但有区别:我需要为课程添加一些字段(如课程成本、年龄跨度、课程每周的哪一天等)。我想我可以在帖子分类中添加自定义字段,但我想将“普通帖子”与“课程”分开。我在PHP编程方面有很多经验,但Wordpress对我来说是新的。我了解分类法和挂钩的概念,并且了解WP如何处理主题、子主题、插件等。我在安装了一个名为Simple Taxonomy的插件https://github.com/herewithme/simple-