我也遇到了这个问题,发现这是我的 functions.php 文件中的一个函数修改了全局 wordpress 查询参数的结果。
听起来您编辑了全局$query
对象。如果您使用了诸如“pre_get_posts”之类的钩子并操作了$query
对象并且您不排除管理区域,那么您对查询参数所做的任何更改也将应用于管理面板,并且在尝试添加时会显示该错误不适合您搜索的参数。
例如:
假设您的网站上有一个搜索功能,当用户输入搜索并转到搜索结果页面时,您只想显示名为 的自定义帖子类型的帖子$searchable_posts
,那么您可以functions.php
像这样在文件中添加一个钩子:
function searchfilter($query) {
if ($query->is_search && $query->is_main_query() ) {
$query->set('post_type', $searchable_posts);
}
return $query;
}
add_filter('pre_get_posts', 'searchfilter');
这样一来,任何全局默认值$query
都将仅搜索具有匹配帖子类型的结果$searchable_posts
。然而,上面写的方式意味着这也适用$query
于管理面板中的任何全局。
解决此问题的方法是像这样构造您的查询:
function searchfilter($query) {
if ($query->is_search && $query->is_main_query() && !is_admin() ) {
$query->set('post_type', $searchable_posts);
}
return $query;
}
add_filter('pre_get_posts', 'searchfilter');
添加这!is_admin()
意味着您的函数将排除后端管理面板中的任何内容(请参阅is_admin)。
或者,如果可以的话,一种更安全的方法$query
是创建自己的新WP_Query并使用它进行搜索,而不是使用全局默认值 - 法典有很好的示例来说明如何设置它。