原因很简单。。。
在您的代码中(至少在您显示的部分中),您检查的唯一条件是:
if ( is_post_type_archive( \'people\' ) )
因此,当您在“人员存档”中时,该页面上的每个WP\\U查询都会出现这种情况。
假设您在页脚中有一些“最新新闻”部分,它们是通过WP\\u查询检索到的。pre_get_post
过滤器也将为此类WP\\U查询运行,并且上述条件仍然为真。
菜单是另一个示例,因为它也是使用WP\\u Query检索的。。。
这就是为什么检查$query->is_main_query()
此外,如果您只想修改主查询。
因此,您的代码应该如下所示:
else if ( $query->is_main_query() && is_post_type_archive( \'people\' ) ) {
$query->set( \'orderby\', \'meta_value\' );
// Bug: Line below causes the menu not to show.
$query->set( \'meta_key\', \'display_order\' );
$query->set( \'order\', \'ASC\' );
}
当然,也有可能同样适用于if语句的其他部分,因此if的结构可能会改变。。。