WordPress网站管理员后台的搜索功能本身只能对文章标题和内容进行查询搜索,但当我们有比较重要的自定义域post meta时,就需要支持搜索包含自定义域的文章。为了实现后台支持对post meta自定义域的搜索我们需要用到WordPress网站的三个add_filter函数posts_join、posts_where和posts_groupby即可实现该功能。以下是具体代码:

  /*

  添加WordPress网站后台搜索支持post meta自定义域查询

  代码来源: www.wpzhinan.com/jiaocheng/1794.html

  */

  add_filter( ‘posts_join’, ‘posts_join_func’ );

  add_filter( ‘posts_where’, ‘posts_where_func’ );

  add_filter( ‘posts_groupby’, ‘posts_groupby_func’ );

  /**

  * 为WordPress网站搜索加入post meta数据

  */

  function posts_join_func( $join ) {

  global $wpdb;

  if ( ! is_applicable() )

  return $join;

  $join .= “LEFT JOIN $wpdb->postmeta ON $wpdb->posts.ID = $wpdb->postmeta.post_id “;

  return $join;

  }

  /**

  * 确保WordPress网站获取指定的搜索结果

  */

  function posts_where_func( $where ) {

  global $wpdb, $wp;

  if ( ! is_applicable() )

  return $where;

  $where = preg_replace(

  ”/($wpdb->posts.post_title LIKE ‘%{$wp->query_vars[‘s’]}%’)/i”,

  ”$0 OR $wpdb->postmeta.meta_value LIKE ‘%{$wp->query_vars[‘s’]}%’ “,

  $where

  );

  return $where;

  }

  /**

  * 根据WordPress网站文章ID组合结果,并确保不获取重复结果

  */

  function posts_groupby_func( $groupby ) {

  global $wpdb;

  if ( ! is_applicable() )

  return $groupby;

  if ( empty( $groupby ) )

  $groupby = “$wpdb->posts.ID”;

  return $groupby;

  }

  /**

  * 确保WordPress网站在正确的页面

  */

  function is_applicable() {

  global $pagenow, $wp_query;

  // 检查是否在管理员后台

  if ( ! is_admin() )

  return false;

  // 检查是否在文章编辑页

  if ( ‘edit.php’ != $pagenow )

  return false;

  // 检查是否搜索关键词已设置

  if ( ! isset( $_GET[‘s’] ) )

  return false;

  // 检查是否在搜索页面

  if ( ! $wp_query->is_search )

  return false;

  return true;

  }

  代码说明:将以上代码插入主题的function.php文件即可实现自定义域post meta的搜索了。之后你可以尝试以自定义域内容来搜索看看是否能正确地查询到结果。推荐阅读:使WORDPRESS网站更有利于SEO的三个顶级插件