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

/*

添加后台搜索支持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’ );

/**

 * 为搜索加入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;

}

/**

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

 */

function posts_groupby_func( $groupby ) {

         global $wpdb;

         if ( ! is_applicable() )

                 return $groupby;

         if ( empty( $groupby ) )

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

         return $groupby;

}

/**

 * 确保在正确的页面

 */

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;

} 推荐阅读:WORDPRESS5.3更新了哪些内容(1)

代码说明:将以上代码插入主题的function.php文件即可实现自定义域post meta的搜索了。之后你可以尝试以自定义域内容来搜索看看是否能正确地查询到结果。