当主查询链接到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()要修改分类法查询?我完全不知所措。
发布于 2019-05-05 12:54:25
在最初的设置中,前端的所有类别查询都受到您定义的pre_get_posts过滤器的影响。因此,它对菜单查询的干扰。然后添加了一个额外的条件,is_main_query。结果是,菜单和主循环都不再受过滤器的影响。
这只能意味着一件事。您的页面上的主要查询实际上不是。因此,过滤器没有应用。
如果您自己编写了这个主题,您可以清理它,从而得到主查询并应用过滤器。否则,您可以检查代码,如果有一些参数集,您可以使用get方法检查,以确保您有条件地针对正确的查询,而不是使用is_main_query。
https://wordpress.stackexchange.com/questions/337112
复制相似问题