Wordpress、meta_filter_posts损坏了自定义菜单小部件


Wordpress, meta_filter_posts damaged the custom-menu widgets

当我将此代码添加到functions.php

function meta_filter_posts( $query )
{
   if(is_tag() && is_main_query())
   {
        $currentTagId = get_queried_object()->term_id;
        $query->set('orderby','meta_value_num');
        $query->set('meta_key', 'rank_tag_'.$currentTagId.'');
        $query->set('order', 'ASC'); 
   }
}
add_filter( 'pre_get_posts', 'meta_filter_posts' );

我的侧边栏custom menu-小部件已经不工作了
小部件仅显示widget-title,而不显示widget-content

其余部分,例如text-窗口小部件工作正常。

但为什么呢?我的代码出了什么问题?

这里有两个问题:

  • 使用pre_get_posts时,应始终确保仅针对前端。pre_get_posts更改所有类型的查询前端后端

  • is_tag()is_main_query()应该是$query 的成员变量

你可以做一些类似的事情

if(!is_admin() && $query->is_tag() && $query->is_main_query())