eck*_*cko 6 wordpress search post admin custom-post-type
我有一个网站,其中包含使用 Ultimate CMS 插件创建的一些自定义帖子类型。在管理区域中,当我进行新搜索时,结果没问题,但之后,当我尝试进行第二次搜索时,它给我一个错误“无效的帖子类型”。
我还意识到该网址不行:
在第一次搜索中,网址如下所示: http://www.site.com/wp-admin/edit.php ?s=SearchTerm1&post_status=all&post_type=post&action=-1&m=0&cat=0&paged=1&mode=list&action2=- 1
在第二次搜索中,网址类似于:
以及错误消息:“无效的帖子类型”。
我停用了所有插件,将 WordPress 升级到最新版本 3.5.1,将永久链接重置为默认值,但此错误仍然存在。
任何帮助将非常感激!
谢谢
我也遇到了这个问题,发现这是我的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');
Run Code Online (Sandbox Code Playgroud)
这将使任何全局默认值$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');
Run Code Online (Sandbox Code Playgroud)
添加这!is_admin()意味着您的函数将排除后端管理面板中的任何内容(请参阅is_admin)。
或者,如果可以的话,一种更安全的方法$query是创建您自己的新WP_Query并使用它进行搜索,而不是使用全局默认值 - Codex 有很好的示例说明如何设置它。
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           2596 次  |  
        
|   最近记录:  |