WordPress帖子字段查询meta_query的各种高级用法一览
在WordPress的get_posts或WP_Query方法中,meta_query可以用来修改无数的高级搜索,这是WordPress的入门技能。
最简单的使用,特殊字段“post_color”的文章查询是“红色”
$arr = array( 'post_type', => 'post', 'meta_key' => 'post_color', 'meta_value' => 'red' ); $myPosts = new WP_Query( $arr ); |
引入meta_compare参数,特殊字段“post_color”的文章查询不是“红色”
$arr = array( 'post_type', => 'post', 'meta_key' => 'post_color', 'meta_value' => 'red', 'meta_compare' => '!=' ); $myPosts = new WP_Query( $arr ); |
推荐怎么写
来吧开始进阶使用。首先,我们需要改变编写方式,将所有与自定义字段相关的参数打包到meta_query参数中。效果和上一段是一样的:
$arr = array( 'post_type', => 'post', 'meta_query'=> array( 'key' => 'post_color', 'value' => 'red', 'compare' => '!=' ) ); $myPosts = new WP_Query( $arr ); |
如果查询中包含多个不同值的 For post_color,meta_value 可以写成一个包含多个值的数组。 Meta_compare 改为 IN
$arr = array( 'post_type', => 'post', 'meta_query'=> array( 'key' => 'post_color', 'value' => array('red','green','yellow)', 'compare' => 'IN' ) ); $myPosts = new WP_Query( $arr ); |
相反,compare NOT IN
$arr = array( 'post_type', => 'post', 'meta_query'=> array( 'key' => 'post_color', 'value' => array('red','green','yellow)', 'compare' => 'NOT IN' ) ); $myPosts = new WP_Query( $arr ); |
“compare”参数用于数字类型列,用途较多,如>=、>= , , strong>, =❀
$arr = array( 'post_type', => 'post', 'meta_query'=> array( 'key' => 'post_index', 'value' => 88, 'type' => 'numeric', 'compare' => '<=' ) ); $myPosts = new WP_Query( $arr ); |
!=
同时指定数值类型 Value,需要添加一个数字参数类型
$arr = array( 'post_type', => 'post', 'meta_query'=> array( 'key' => 'post_index', 'value' => 88, 'type' => 'numeric', 'compare' => '<=' ) ); $myPosts = new WP_Query( $arr ); |
如果要问间隔值,compare写“ANTARA”
$arr = array( 'post_type', => 'post', 'meta_query'=> array( 'key' => 'post_index', 'value' => array(10, 20), 'type' => 'numeric', 'compare' => 'BETWEEN' ) ); $myPosts = new WP_Query( $arr ); |
反之也可以用“♼ NOT BETWEEN”
” ANTARA”也可用于比较日期或时间,只要它们以相同的格式书写即可
$arr = array( 'post_type', => 'post', 'meta_query'=> array( 'key' => 'start_day', 'value' => array('2018-01-01', '2020-01-01'), //'value' => array('2018-01-01 23:00:00', '2020-01-01 23:05:00'), 这样也可以 'compare' => 'BETWEEN' ) ); $myPosts = new WP_Query( $arr ); |
您还可以比较时间戳。 number,所以还是需要使用数字类型:
$arr = array( 'post_type', => 'post', 'meta_query'=> array( 'key' => 'start_day', 'value' => array( strtotime('2018-01-01'), strtotime('2020-01-01')), 'type' => 'numeric', 'compare' => 'BETWEEN' ) ); $myPosts = new WP_Query( $arr ); |
注意:使用BETWEEN作为操作符会增加数据库的压力。 我们来谈谈可能的使用场景。假设页面上有一个包含两个数字字段的过滤器,允许用户输入 2 个数字作为文章查询的下限和上限,且列值介于这两个数字之间。 。但现实中,这些应用很少出现在业务量大的网站上,因为这样的查询会给数据库带来很大的压力,甚至会导致服务器崩溃。更常见的做法是,上限和下限不作为数字框供用户自由使用,而是改为提供多个选项的选择框,例如0-100、100-1000、1000-5000、 ETC。查询字段也是文本类型区间,这样会减少查询压力。
对于字符字段,您还可以执行类似搜索的查询。 compare的值是LIKE
$arr = array( 'post_type', => 'post', 'meta_query'=> array( 'key' => 'first_name', 'value' => 'Brain', 'compare' => 'LIKE' ) ); $myPosts = new WP_Query( $arr ); |
反之,也可以用NOT LIKE
如果只是想问是否有字段,就用,否则也可以用 NOT EXISTS 您甚至可以将它们与正则表达式结合使用 相反,使用 NOT REGEXP 不匹配多个查询 ♻ 不匹配常规查询。 ry 下面是多种条件匹配,引入一个新参数“relation” “relation”作为条件参数,可以是AND或❀ OR,♿ ❀ OR : 根据自定义列值简单排序: 如果列值是数字的话,就是这样 结合meta_query❀参数写法: : 上面的例子是按meta_age升序排序的优先级最高,按meta_date降序排序为第二优先级。$arr = array(
'post_type', => 'post',
'meta_query'=> array(
'key' => 'first_name',
'value' => '^[A-Z][a-z]*$', //大写字母开头的名字
'compare' => 'REGEXP'
)
);
$myPosts = new WP_Query( $arr );
$arr = array(
'post_type', => 'post',
'meta_query'=> array(
'relation' => 'AND',
array(
'key' => 'first_name',
'value' => 'Brain'
),
array(
'key' => 'last_name',
'value' => 'Shi'
)
)
);
$myPosts = new WP_Query( $arr );
$arr = array(
'post_type', => 'post',
'meta_query'=> array(
'relation' => 'OR',
array(
'key' => 'post_color',
'value' => array('red','green','yellow)',
'compare' => 'IN'
),
array(
'relation' => 'AND',
array(
'key' => 'first_name',
'value' => 'Brain'
),
array(
'key' => 'last_name',
'value' => 'Shi'
)
)
)
);
$myPosts = new WP_Query( $arr );
关于排序
$arr = array(
'post_type', => 'post',
'meta_key' => 'post_color',
'orderby' => 'meta_value'
);
$myPosts = new WP_Query( $arr );
$arr = array(
'post_type', => 'post',
'meta_key' => 'post_index',
'orderby' => 'meta_value_num',
'order'=> 'DESC'
);
$myPosts = new WP_Query( $arr );
$arr = array(
'post_type', => 'post',
'meta_query'=> array(
'relation' => 'AND',
'meta_age' => array(
'key' => 'age',
'value' => array(20,40),
'compare' => 'BETWEEN'
),
'meta_date' => array(
'key' => 'start_date',
'value' => array('2020-05-01','2021-05-01'),
'compare' => 'BETWEEN'
)
),
'orderby' => array(
'meta_age' => 'ASC',
'meta_date' => 'DESC'
)
);
$myPosts = new WP_Query( $arr );
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。