WordPress搜索自定义字段(Custom Field)内容
网站搜索搜产品标题能搜出结果,但是如果搜索产品编号是搜不出结果的,对于用户的体验不是很好。 确实,文章自定义字…
网站搜索搜产品标题能搜出结果,但是如果搜索产品编号是搜不出结果的,对于用户的体验不是很好。
确实,文章自定义字段保存在postmeta表中,而wordpress搜索仅会搜索文章表即posts表。
第一步:链接查询
也就是修改搜索查询的sql代码,将postmeta表左链接进去。
functioncf_search_join($join){
global$wpdb;
if(is_search()){
$join.=’LEFTJOIN’.$wpdb->postmeta.’ON’.$wpdb->posts.’.ID=’.$wpdb->postmeta.’.post_id’;
}
return$join;
}
add_filter(‘posts_join’,’cf_search_join’);
第二步:查询代码
functioncf_search_where($where){
global$pagenow,$wpdb;
if(is_search()){
$where=preg_replace(
“/(s*”.$wpdb->posts.”.post_titles+LIKEs*(‘[^’]+’)s*)/”,
“(“.$wpdb->posts.”.post_titleLIKE$1)OR(“.$wpdb->postmeta.”.meta_valueLIKE$1)”,$where);
}
return$where;
}
add_filter(‘posts_where’,’cf_search_where’);
第三步:去重
搜索结果很有可能有重复的,所以需要去重,很简单,在sql语句中加入DISTINCT关键字。
functioncf_search_distinct($where){
global$wpdb;
if(is_search()){
return”DISTINCT”;
}
return$where;
}
add_filter(‘posts_distinct’,’cf_search_distinct’);
总结:
依次将上面三步骤中的代码加入到主题的functions.php文件中即可。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 wper_net@163.com 删除。
还没有任何评论,赶紧来占个楼吧!