您好!欢迎来到黑域吧资源网!本站资源24小时自动发货,请放心选购,一次付费,终身下载,售后请联系客服!

巧妙使用 WordPress 搜索支持自定义字段数据

作者 : 黑域吧 本文共2019个字,预计阅读时间需要6分钟 发布时间: 2020-09-26 共48人阅读

WordPress 强大之一就是支持自定义字段,例如作为电商系统,商品的最重要的属性就是商家编码,以后进行一些店铺之间商品复制操作,甚至做供应量,也是需要靠这个属性来进行操作,我们也可以为文章页添加各种各样的自定义字段,这些自定义字段是存在 wp_postmeta 表内,而 WordPress 默认搜索是不支持搜索 wp_postmeta 表内的数据的,所以想让 WordPress 默认搜索支持搜索自定义字段数据,我们可以将以下代码添加到当前主题的 functions.php 文件中:

 add_action('posts_search', function($search, $query){
        global $wpdb;
        if ($query->is_main_query() && !emptyempty($query->query['s'])) {
            $sql    = " OR EXISTS (SELECT * FROM {$wpdb->postmeta} WHERE post_id={$wpdb->posts}.ID and meta_key = 'product_no' and meta_value like %s)";
            $like   = '%' . $wpdb->esc_like($query->query['s']) . '%';
            $search .= $wpdb->prepare($sql, $like);
        }
        return $search;
    },2,2);

以上就是用于来支持 WordPress 搜索文章自定义字段数据的代码,如果你要使用或者用于检索自定义字段,需要修改以上代码中的“product_no”替换成你所需的相关字段即可。

高级用法

使用wordpress搜索网站内容,只会把关键词与文章标题或内容匹配搜索,这一点用户体验不是很好,如果有这么个需求,产品类型的文章,使用了自定义字段添加产品编号,而用户想通过产品编号搜索产品,是搜索不出结果的,原因是wordpress只会搜索posts数据表,而自定义字段数据是保存在postmeta数据表。

那么是否可以让WordPress搜索功能支持自定义字段匹配,显然是可以的,通过修改搜索查询的sql代码,把postmeta数据表关联进去就可以实现,下面是实现的代码:
1、链接查询
作用:修改搜索查询的sql代码,将postmeta表左链接进去。

/**
 * Join posts and postmeta tables
 *
 * http://codex.wordpress.org/Plugin_API/Filter_Reference/posts_join
 */
function cf_search_join( $join ) {
	global $wpdb;
	if ( is_search() ) {
		$join .=' LEFT JOIN '.$wpdb->postmeta. ' ON '. $wpdb->posts . '.ID = ' . $wpdb->postmeta . '.post_id ';
	}
	return $join;
}
add_filter('posts_join', 'cf_search_join' );

2、查询代码
作用:在wordpress查询代码中加入自定义字段值的查询。

/**
 * Modify the search query with posts_where
 *
 * http://codex.wordpress.org/Plugin_API/Filter_Reference/posts_where
 */
function cf_search_where( $where ) {
	global $pagenow, $wpdb;
	if ( is_search() ) {
		$where = preg_replace("/(s*".$wpdb->posts.".post_titles+LIKEs*('[^']+')s*)/", "(".$wpdb->posts.".post_title LIKE $1) OR (".$wpdb->postmeta.".meta_value LIKE $1)", $where );
	}
	return $where;
}
add_filter( 'posts_where', 'cf_search_where' );

3、去重
作用:搜索结果很有可能有重复的,所以需要去重,很简单,在sql语句中加入DISTINCT关键字。

/**
 * Prevent duplicates
 *
 * http://codex.wordpress.org/Plugin_API/Filter_Reference/posts_distinct
 */
function cf_search_distinct( $where ) {
	global $wpdb;
	if ( is_search() ) {
		return "DISTINCT";
	}
	return $where;
}
add_filter( 'posts_distinct', 'cf_search_distinct' );

把上面的代码一起添加到当前主题的functions.php文件即可。

提示:
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!邮箱:(332547532@qq.com)
2. 分享目的仅供大家学习和交流,请不要用于商业用途!QQ群: 10563080
3. 如果你也有好源码或者教程,可以到审核区发布,分享有金币奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务 请大家谅解!
5. 如有链接无法下载、失效或广告,请点击右下方联系站长,可领回失去的金币,并额外有奖!
6. 如遇到加密压缩包,默认解压密码请在"下载框架提示方寻找",如遇到无法解压的请联系管理员!
黑域吧资源网 » 巧妙使用 WordPress 搜索支持自定义字段数据

发表评论

售后服务:

  • 售后服务范围 1、商业模板使用范围内问题免费咨询
    2、源码安装、模板安装(一般 ¥50-300)服务答疑仅限SVIP用户
    3、单价超过200元的模板免费一次安装,需提供服务器信息。
    付费增值服务 1、提供dedecms模板、WordPress主题、discuz模板优化等服务请详询在线客服
    2、承接 WordPress、DedeCMS、Discuz 等系统建站、仿站、开发、定制等服务
    3、服务器环境配置(一般 ¥50-300)
    4、网站中毒处理(需额外付费,500元/次/质保三个月)
    售后服务时间 周一至周日(法定节假日除外) 9:00-23:00
    免责声明 本站所提供的源码等资源仅供学习交流,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担,有部分资源为网上收集或仿制而来,若模板侵犯了您的合法权益,请来信通知我们(Email: 332547532@qq.com),我们会及时删除,给您带来的不便,我们深表歉意!

Hi, 如果你对这款模板有疑问,可以跟我联系哦!

联系作者
开通SVIP 享更多特权,建议使用 QQ 登录
喜欢我嘛?喜欢就按“ctrl+D”收藏我吧!♡