我在我的WP帖子上设置了一些元变量。我希望能够按这些变量排序,除了按“视图”或“喜欢”排序外,其他一切都很正常。当我按这两个字段中的任何一个进行排序时,WP不会生成我的nav(WP\\U nav\\U菜单)。
我已尝试“重置”围绕我的wp\\u nav\\u菜单调用的$wp\\u查询变量:
$old_query = $wp_query;
$wp_query = new WP_Query( array(\'post_type\' => \'any\') );
wp_nav_menu( array( \'container_class\' => \'menu-header\', \'theme_location\' => \'primary\' ) );
$wp_query = $old_query;
但这并不能解决问题。唯一有效的方法是注释掉以$query->query\\u vars[\'meta\\u key\')开头的行,但这显然也否定了排序。
任何帮助都将不胜感激。
// Before a query is run, modify the sort order
function jh_popularity_sort_query($query) {
$sort = $_GET[\'sort\'];
if ($sort == "title") {
$query->query_vars[\'orderby\'] = \'title\';
$query->query_vars[\'order\'] = \'ASC\';
} else if ($sort == "date") {
$query->query_vars[\'orderby\'] = \'date\';
} else if ($sort == "views") {
$query->query_vars[\'meta_key\'] = \'jh_page_views\';
$query->query_vars[\'orderby\'] = \'meta_value\';
$query->query_vars[\'order\'] = \'DESC\';
} else if ($sort == "likes") {
$query->query_vars[\'meta_key\'] = \'jh_page_likes\';
$query->query_vars[\'orderby\'] = \'meta_value\';
$query->query_vars[\'order\'] = \'DESC\';
}
return $query;
} add_action(\'pre_get_posts\', \'jh_popularity_sort_query\');
最合适的回答,由SO网友:helenhousandi 整理而成
导航菜单也由WP\\U查询生成,因此在pre_get_posts
回调函数,您需要检查$query
你要改变的是主要问题。最简单的方法可能是在函数的开头执行此操作:
if ( ! $query->is_main_query() )
return $query;
还请注意
jh_popularity_sort_query()
回调函数,您可能应该使用
set()
方法,例如。
$query->set( \'orderby\', \'date\' )
. 该方法与您在上面所做的完全相同,只需更改
$query_vars
阵列,但它会让你前进更安全。我认为它还可以生成更漂亮的代码:)