设置$Query->Query_vars[‘META_KEY’]时,WordPress菜单消失

时间:2012-05-17 作者:Josh Hudnall

我在我的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\');

2 个回复
最合适的回答,由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 阵列,但它会让你前进更安全。我认为它还可以生成更漂亮的代码:)

SO网友:Cris

请尝试以下代码:

function fix_missing_menu( $query ) {
        $query->set( \'post_type\', array(
       \'post\', \'nav_menu_item\'
           ));
} 
add_filter( \'pre_get_posts\', \'fix_missing_menu\' );
将其放入函数中。php,看看它是否有效。

nav_menu_item 也是wordpress中的自定义帖子类型

结束

相关推荐

Register_nav_menus()不会注册菜单

请帮助进行菜单注册:我遵循了这个指南(http://codex.wordpress.org/Navigation_Menus)一步一步。向函数中添加了以下代码。php:function register_my_menus() { register_nav_menus( array(\'header-menu\' => __( \'Header Menu\' ) ) ); } add_action( \'init\', \'regist