$Query->is_main_Query()导致Query的TAX_QUERY被忽略

时间:2019-05-05 作者:csaborio

我在修改挂接到的主查询时遇到问题pre_get_posts 因为它导致菜单不显示。这是原始代码:

else if ( isset( $_GET[\'category\'] ) && !is_admin()  ) {
    $_GET   = filter_input_array(INPUT_GET, FILTER_SANITIZE_STRING);
    $tax_query = array(
        array(
            \'taxonomy\' => \'events-category\',
            \'field\' => \'slug\',
            \'terms\' => array( strtolower( $_GET[\'category\'] ) ),
        ),
    );
    $query->set( \'tax_query\', $tax_query );
}
有人建议修改条件并添加$query->is_main_query() 要避免弄乱菜单的查询,请执行以下操作:

else if ( isset( $_GET[\'category\'] ) && !is_admin() && $query->is_main_query()  ) {
我确实更改了它,并显示了菜单,但分类查询现在被完全忽略,并且显示了所有帖子。

为什么会$query->is_main_query() 是否修改分类查询?我完全困惑了。

1 个回复
最合适的回答,由SO网友:cjbj 整理而成

在原始设置中,前端上的所有类别查询都受pre_get_posts 您定义的筛选器。因此它会干扰菜单查询。然后你添加了一个额外的条件,is_main_query. 结果是菜单和主循环都不再受过滤器的影响。

这只能意味着一件事。页面上看起来像主查询的内容实际上不是。因此,不应用过滤器。

如果你自己写了这个主题,你可以清理它,这样你就可以得到主查询并应用过滤器。否则,如果设置了一些参数,您可以检查代码,您可以使用get method 确保有条件地以正确的查询为目标,而不是使用is_main_query.

相关推荐