所以我有一个现成的wordpress“搜索”小部件,我想扩展它。我使用以下过滤器可以在小部件中搜索我的自定义帖子类型:
add_filter( \'pre_get_posts\', function($query) {
if ($query->is_search) {
$query->set(\'post_type\', [
\'post\', \'profile\' ,\'recipe\', \'dish\'
]);
}
});
我发现的问题是,它重写了网站上的所有搜索项目,包括管理面板“帖子”中的搜索框,在那里我得到了自定义帖子类型的结果,尽管他们并不住在那里。
是否有人知道如何改进搜索小部件上的搜索功能,以便在不覆盖整个站点的所有搜索框的情况下包含自定义帖子类型?
最合适的回答,由SO网友:Tom J Nowell 整理而成
这很简单,pre_get_posts
适用于所有查询,而不仅仅是前端的查询。因此,如果您不希望它在管理查询上运行,请测试您是否在管理中,并尽早退出!
您可能还想验证您是否在主查询中
add_filter( \'pre_get_posts\', function( \\WP_Query $query) {
if ( is_admin() ) {
return;
}
if ( ! $query->is_main_query() ) {
return;
}
回想起
pre_get_posts
在所有查询上运行,无论在哪里,无论是admin、frontend、XMLRPC、REST API等。如果您告诉它只在前端运行,它将只在前端运行。