!
也想出现在这里? 联系我们
广告位

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

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

  1. add_action- { 2 s %('posts_search', function($search, $query){
  2. global $wpdb;
  3. if ($query->is_main_query() && !emptyeP K o @ : 5 fmpty($query->query['s'])) L { V % Y R \ \23;
  4. $sql = " OR EXISTS (SELECT * FROM {$wpdb->postmeta} WHERE pos, I O Vt_id={$wpdb->posts}.ID and meta_key = 'product_no' and meta_value like %s)";
  5. $like = '%' . $wpdb->esc_like+ W ^0;p _ t 3 q % 8 , y$query->query['s']) . '%';
  6. $search .= $wpdb-&[ J * Dgt;/ | [ yprepaw \ j @ E =reO T * h($sql, $like);
  7. }
  8. return $search;
  9. },2,2);

以上就是用于来; & f K r w p @支持 WordPress 搜索文章自定义字段数据的代码,如果你要使用或者用于检索自定义字段,需要修改以上代码中的“produn u 9ct_no”替换成你所需的相关字段即可。

高级用法

使用 wordpressg q / 4索网站内容,只会把关键词与文章标题或内容匹配搜索,这一点用户体验不是很好,如果有这么个需求,产品[ n 9 x g =类型的文章,使用了自定义字段添加产品编号,而用户想通过产品编号搜索产Y G & ! T {品,是搜索不出结果的,原因是 wordpress 只会搜a z 8 d $ B Y ? ^索 posts 数据表,而自定义字段数据是保存在 postmeta 数据表。

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

  1. /**
  2. * Join posts and postmeta tables
  3. *
  4. * httF m H 3 x Jp://codex.wordpress.org/Plugin_API/Filter_Reference/posts_join
  5. */
  6. function cf_search_join( $join ) {
  7. global $wpdb;
  8. if ( is_sea/ N 3 e S V |rch() ) {
  9. $join .=' LEFT JOIN '.$wpdb-&g} g E Yt;postmeta. ' ON './ ! . t : p u O z $wpdb-&gt~ : b \ Y v 9;posts . '.ID = ' . $wpdb-&g5 n j H I U - `t;postmeta . '.post_id ';
  10. }
  11. return $h @ ojoins Y T h ) _ m k;
  12. }
  13. add_filter('posts_join', 'cf_search_join' )# 0 o G ) 8 K;

2、查询代码
作用:在 wordpress 查m y h y 0 ( n询代码中加入自定义字段值的查询。

  1. /**
  2. * Modify the search q* D p s m ;uery with posts9 } ) o_where
  3. *
  4. * http://codex.wordpress.org/Plugin_API/Filt) O ) B 1 Z Fer_Reference/po^ U \ qsts_wherk n / f y fe
  5. */
  6. function cf_search_where( $where ) {
  7. global $pagenow, $wpdb;
  8. if ( is_se2 ^ _ f a farch() &4 T _#041; {
  9. $where = preg_replacx G m ` + a Pe("/\(\s*".$wpdb->poo L r O g x 0 + Psts.".post_title\s+LIKE\s*(W % 3\'[^\']+\')\s*\)/", "(".$wpdb->posts.".post_title LIKX I $ \ ! m v I oE $1) OR (".$wpdb->pK M ! r z Aostmeta.&quot+ 6 : z ] U f A;.\ d \ Y ! V Zmeta_value LIKE $1)", $wa e C . $ e + A Nhere );
  10. 8 & ` @ M #125;
  11. ret^ n H Zurn $where;
  12. }
  13. add_filter( 'posts_where', 'cf_search_whe\ ! i & 8 ` q #re' );

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

  1. /**
  2. * Prevent duplicates
  3. *
  4. * http://codex.wordpress.org/a b # X [ hPlugin_API/Filter_Reference/posts_distinct
  5. */
  6. function cf_search_distinct@ u \ E v `( $where ) {
  7. global $w( P ;pdb;
  8. if ( is_search() ) {
  9. return "DISTINCT&quoto N 1 6 T;;
  10. }
  11. return $where;
  12. }
  13. add_filter( 'posts_distinct', 'cf_search_distinct' );

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

给TA打赏
共{{data.count}}人
人已打赏
WordPress教程

WordPress主Web字体加载器本地化Web字体加载

2022-9-24 15:48:14

WordPress教程

WordPress如何生成加密类型的密码以及密码验证方法

2022-9-25 15:48:15

下载说明

  • 1、微码盒所提供的压缩包若无特别说明,解压密码均为weimahe.com
  • 2、下载后文件若为压缩包格式,请安装7Z软件或者其它压缩软件进行解压;
  • 3、文件比较大的时候,建议使用下载工具进行下载,浏览器下载有时候会自动中断,导致下载错误;
  • 4、资源可能会由于内容问题被和谐,导致下载链接不可用,遇到此问题,请到文章页面进行反馈,以便微码盒及时进行更新;
  • 5、其他下载问题请自行搜索教程,这里不一一讲解。

站长声明

本站大部分下载资源收集于网络,只做学习和交流使用,版权归原作者所有;若为付费资源,请在下载后24小时之内自觉删除;若作商业用途,请到原网站购买;由于未及时购买和付费发生的侵权行为,与本站无关。本站发布的内容若侵犯到您的权益,请联系本站删除,我们将及时处理!
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索