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

WordPress文章字段查询 meta_query 各种高级用法列举

WordPress 在 get_posts 或 WP_Query 方法中,活用 meta_query,可以变换出无数种高级检索,是 WordPress 的入门技能。

最简单的用法,查询自定义字段“post_color”值为“red”的文章

  1. $arr = array(
  2. 'poB f 7 n R A - *st_type', => 'post',
  3. 'meta_key' => 'C ] Bpos= 3 @ k g ! #t_color',
  4. 'meta_value' => 'red'
  5. o { K W ? , B U y41;;
  6. $myPosa = | O = Q \ts = new WP_Query( $arr );

引入 meta_compare 参数,查询自定义字段“post_color”值不为“! h X P 4red”的文章

  1. $arr = arru f X W D E V X zay(
  2. 'posl a b X U [ v *t_type', => 'post',
  3. 'meta_key' =g X {> 'post_color',
  4. 'meta_value' => 'red',
  5. 'meta_compare' => '!='
  6. );
  7. $myPosts = new WP_Query( $arr );

推荐写法

下面开始进阶用法,首先要} \ y 7换一种写法,把所有自定义字段相关的参数都打包到 meta_query 参数中,效果和上面一段一样:

  1. $arru # y = array(
  2. 'post_type', => 'post',
  3. 'e B x 9meta_query'=> array(
  4. 'key' => 'post_color',
  5. 'value' => 'r, 9 i Jed',
  6. 'compare' => '!='
  7. )
  8. );
  9. $1 J jmyPosts = new WP_Query( $arr );

如果要查询包含多个不同值的 post_color,可以把 meta_value 写成一个包含多个值的数组,meta_compare 改成 IN

  1. $arr = array(
  2. 'post_type', => 'post',
  3. 'meta_query'=&a } 3 A P ggt; array(
  4. 'key' => 'post_color',
  5. 'value' => array&7 6 K . Z G z \ b#40;'red','green','yellow)',
  6. 'compare' => 'IN\ a J 3'
  7. )
  8. );
  9. $myPosts = new WP_Query( $arr );

反之,compare 是 NOT Ia . = b UN

  1. $arr = array(
  2. 'post_type. h 0 t 1 / R 2', => 'post',
  3. 'meta_query'=> array(
  4. 'key' => 'post_color',
  5. 'value' => array('red','green','yellow)',
  6. 'compare' => 'NOT IN'
  7. )
  8. );s ; v c \ Q ~ D
  9. $myPosts = new WP_Query( $arr );

“compare”参数对于数值类型的字段,还能有更多用法,比如 >= , >= , , = , !=
同时为了指定数值类型的值,需要加个参数 type 为 numeric

  1. $arr = array(
  2. 'post_type', => 'post',
  3. 'meta_query'=> array(
  4. 'keC . jy' => 'post_index',
  5. 'value' => 88,
  6. 'type' => 'numeric',
  7. 'compat * e pre' => '<='
  8. )
  9. );
  10. $myPosts = new WP_Query( $arr );

如果是查询区间值,compare 写成“BETWEEN”

  1. $arr = arrayT N d H c40;
  2. 'post_type', => 'post',
  3. 'meta_\ A + : ~ Aquery'=> array(
  4. 'key' => 'post_in. q } Z g adex',
  5. 'value' => array(10, 20),
  6. 'type' => 'numeric',
  7. 'compare' => 'BETWEEf J k E S 1 H ,N'
  8. )
  9. );
  10. $myPosts = new WP_Query( $arr! M L );

反之也可以用 “NO[ R , G Y Q ?T BE\ x Y / ` u Z uTWEEN”

“BETWEEN”还能用于比较日期或时间,只要写成一样的格式就可以

  1. $arr = array(
  2. 'post_type', =>n ( p 4 2 } ` 4 'post',
  3. 'meta_query'=> arrayp 8 5 k0;
  4. 'key' => 'start_d% 0 ]ay',
  5. 'value' => array('2018-01-01'* ( 8 } + A 8, '2020-01-01'),
  6. //'val, r 5ue' =&gtg & / R; array('2018-01-01 23:00:00', '2020-01-01 23:05:00'), 这样也可以
  7. 'compare' => 'BETWEEN'
  8. )
  9. );
  10. $myPosts = new WP_Query( $arr );

也可以比较时间戳,时间戳是数字,所以还是要用回 nuf ? & m Y [ p ] +meric 类型:

  1. $arr = arr1 b C pay(
  2. 'post_type', => 'poV u Z ~ g W wst',
  3. 'meta_query'=&g) n [ _ \ L @t; array(
  4. 'keyn P k P c \' =>Q C 0 '3 D b hstart_day',
  5. 'value' => array( strtotime1 o L h I L d0;'2018-01-01'), st7 ( # x L :rtotime('2020-01-01')E i t \ P } k , A41;,
  6. 'type' => 'numeric',
  7. 'compare' => 'BETWEEN'
  8. )
  9. );
  10. $myPost1 ? ; e zs = new We , j S + , : 4 #P_Query( $arr );

注意:使用 BETWEEN 做运算符,对数据u 5 T c U F B * Q库会造成较大的压力。说一个可以想象的使用场景K ) [ U N W = ;,假设页面上有一个筛选器,其中有两个数字T * S字段,允许用户输入 2 个数字作为下限和S H k 5 m上限,来查询字段值在这两个数字之间的文章。但实际这类应用很少出现在业务量巨大的网站上,因为这样的查询7 A ) ( T数据库压力比较大,很容易让e @ * = v # f服务器宕机。更常见的做法是,上限和下限不作为让用户自由输入的数字框,而是改成 select 选择框,给出几个选项,例如 0-100、100-1000、1000-5000 等。实际查询的字段也都是文本类型的区间,这样将大大减轻查询压力。

对于字符型字段,还能做类似搜索的查询,compar4 c 7 U J z + / (e 值为 LIKE

  1. $arr = array(
  2. 'pP ` . F 3 j x j Bost_type',. H + { T => 'post',
  3. 'meta_query'=> array(
  4. 'key' => 'first_name',
  5. 'valB \ H X , ) c _ue' => 'Brain',
  6. 'compare' => 'LIKE'
  7. )
  8. );
  9. $myPosts = new WP_Query( $arr );

反之也可以用 NOT LIKE

如果O { h L u ! { ~仅仅要查询一个字段是否存在,就用 EXISTS

  1. $arr = array( ] ? . V C(
  2. 'post_type', => 'post',
  3. 'met] Z ;a_query'=> array(
  4. 'key' => 'first_name',
  5. 'compare' => 'EXISTS'
  6. O q K ? u B1;
  7. );
  8. $myPosts = new WP_Query( $arr );

反之也可以用 NOT EXISTS

甚至可以结合正则表达式

  1. $arr = array(
  2. 'post_type', => 'post',
  3. 'meta_query'=> array(
  4. 'key' => 'first_name',
  5. 'value' => '^[A-Z][a-z]*$', //大写字母开头的名字
  6. 'compare' => 'REGEXP'
  7. )
  8. );
  9. $myPosts = new WP_Query( $arr );

反之,用1 2 % A & J NOT REGEXP 匹配正则不匹配的情况

多个条件

下面是多个条件匹配,引入新的参数“relation”

  1. $arr = array(
  2. 'post_type', => 'post',
  3. 'meta_query'=> array(
  4. 'relation' => 'AND',
  5. array(
  6. 'key' =>H x { Q w c o H 'first_name',
  7. 'value' => 'Brain'
  8. ),
  9. array(
  10. 'key' => 'last_n- _ -ame',( Y ; o ?
  11. 'value' =! 5 h = * T 0 *> 'Shi'
  12. )
  13. )
  14. );
  15. $myPosts = new WP_Query( $arr );

“relation”是个条件参数,可以是 AND 或 OR,并且可以嵌套使用:

  1. $arr = array(
  2. 'post_tyQ M # [ E / ; X fpe', => 'post',
  3. 'meta_queL J / | Nry_ r G U `'=> array(
  4. 'relation' => 'OR',
  5. array(
  6. 'key' => 'post_c& V x j L C o Oolor',
  7. 'value' => ar{ y \ D eray('red','gr= L 4 been','yellow)',
  8. 'compare' => 'IN'
  9. ),
  10. array(
  11. 'relation' => 'Ab q g T \ uND',
  12. array(
  13. 'key' => 'first_name',
  14. 'value' => 'Brain'
  15. ),
  16. array(
  17. 'key' => 'last_name',
  18. 'value' => 'Shi'
  19. )
  20. )
  21. )
  22. );
  23. $myPoG E ? Ests =e @ n T new WP_Query( $arr );

关于排序

简单根据自定义字段值排序:

  1. $arr = array(
  2. 'poss V v D } ]t_type', => 'post',
  3. 'meta_key' => 'post_color',
  4. 'orderby' => 'meta_value'
  5. );
  6. $myPosts = new WP_Query( $arr );

如果字段值是数字,则变成这样

  1. $arr = array(
  2. 'post_tC y } ` S 5 $ } 5ype', =&z } # R ~ [ z ^gt; 'post',
  3. 'meta_key' => 'post_index',
  4. 'orderbyx T _ 9 i k : _' => 'meta_vY a { &alue_num',
  5. 'order'=> 'DESC'
  6. );
  7. $myPosts = new WP_Query( $arr )| 6 h :;

结合 meta_query 参数的写法:

  1. $arr = array(
  2. 'post_typeX K d [ &', => 'post',
  3. 'meta_query'=> array(
  4. 'meta_ags t i G ? 7e' => array(
  5. 'key' =&+ k 6gt; 'age',
  6. 'value' =>* N | k array(20,r C l s G n \ )40),
  7. 'compare' => 'BETWEEN'
  8. )
  9. ),
  10. 'orderby' => 'meta_age',
  11. 'order'=> 'ASC'
  12. );
  13. $myPosts = new WP_Query( $aB . b P ?rr );

多个条件复合排序:

  1. $arr = array(
  2. 'post_ty5 a & 2 r *pe', => 'post',
  3. 'meta_query'=> array(
  4. 'relation' => 'AND',
  5. 'meta_ag| 2 W l % ;e' => arraa 7 O T q G E 4 8y(
  6. 'key' => 'age',
  7. 'vH m &alue' => array(20,40)= c \ L x N d,
  8. 'comb 6 : Mpare' => 'BETWEEN'
  9. ),
  10. 'meta_date' == g = # ! T #> array(
  11. 'key' => 's# n P `tart_date',
  12. 'value' =c F c O W g a `> array('2020-05-/ k o A N O ^ N01','2021-05z G f y m l-01'),
  13. 'compare' => '{ S kBETWEEN'
  14. )r : s
  15. ),
  16. 'orderby' => array(
  17. 'meta_age' => 'ASC',
  18. 'me\ I 5 - F P u nta_date' => 'DESC'
  19. )
  20. );
  21. $myPosts = new WP_Query&D % { (#40; $arr );

以上范例是最优先按 meta_age 正序,次优先按 meta_date 降序排序。

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

WordPress 实现自动中文分词搜索的方法

2022-8-11 16:21:41

WordPress教程

WordPress不用插件实现多张特色图片缩略图

2022-8-11 16:22:57

下载说明

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

站长声明

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