WordPress教程:使用WP_Query进行文章查询

WordPress 中,使用 WP_Query 进行文章查询是最常见的操作,学习好这方面的操作, WordPress 开发基本就学会了一半。

张承辉将通过一系列教程讲解如何使用 WP_Query 进行 WordPress 文章查询。

我写这一系列文章的目的也是为了方便自己使用这些参数的时候方便查询,所以如果你也是经常进行 WordPress 二次开发的话,建议收藏本文。

Wordpress教程:使用WP_Query进行文章查询

关于自定义字段相关的参数,自定义字段相关的参数可以让你获取特定自定义字段的文章,相关的参数比较多,首先基本的参数:

  • meta_key (string) – 自定义字段的 key。
  • meta_value (string) – 自定义字段的 value。
  • meta_value_num (number) – 自定义字段的 value,但是必须是数字型。
  • meta_compare (string) – 用于比较 ‘meta_value’ 值的操作符,支持的操作符有:’=’, ‘!=’, ‘>’, ‘>=’, ‘<‘, ‘<=’, ‘LIKE’, ‘NOT LIKE’, ‘IN’, ‘NOT IN’, ‘BETWEEN’, ‘NOT BETWEEN’, ‘NOT EXISTS’, ‘REGEXP’, ‘NOT REGEXP’ 和 ‘RLIKE’,默认是 ‘=’。
  • meta_query (array) – 自定义字段数组参数。
  • relation (string) – 用于定义多个内嵌 meta_query 数组之间的关系,它的值是:’AND’, ‘OR’。只有一个内嵌 meta_query 数组参数的时候,不要使用该参数。

meta_query 还包含一个或者多个具有以下键值的数组:

  • key (string) – 自定义字段的 key。
  • value (string|array) – 自定义字段的 value。如果 compare 的值是 ‘IN’, ‘NOT IN’, ‘BETWEEN’, 和’NOT BETWEEN’ 这几种情况,它可以是数组,如果 compare 的值是 ‘EXISTS’ 和 ‘NOT EXISTS’,就无须指定值。
  • compare (string) – 用于比较的操作符,支持的操作符有:’=’, ‘!=’, ‘>’, ‘>=’, ‘<‘, ‘<=’, ‘LIKE’, ‘NOT LIKE’, ‘IN’, ‘NOT IN’, ‘BETWEEN’, ‘NOT BETWEEN’ 和 ‘NOT EXISTS’,默认是 ‘=’。
  • type (string) – 自定义字段的类型,支持的类型有:’NUMERIC’, ‘BINARY’, ‘CHAR’, ‘DATE’, ‘DATETIME’, ‘DECIMAL’, ‘SIGNED’, ‘TIME’ 和 ‘UNSIGNED’,默认是 ‘CHAR’。

仅当日期以 YYYY-MM-DD 格式存储并使用此格式进行测试时,DATE 的 type 才能与 BETWEEN 的 compare 一起使用。

重要提示:meta_query 的参数应该是一个 meta query 的数组的数组,它让你可以通过最外层数组的 relation 参数来定义关系。

简单自定义字段查询

获取自定义字段的 key 是 ‘color’,而 value 则任意值都可的文章:

  • $query = new WP_Query( array( ‘meta_key’ => ‘color’ ) );

获取自定义字段的 value 是 ‘blue’,而 key 则任意值都可的文章:

  • $query = new WP_Query( array( ‘meta_value’ => ‘blue’ ) );

获取自定义字段的 value 是 ‘blue’,而 key 则任意值都可的页面:

  • $args = array(
  • ‘meta_value’ => ‘blue’,
  • ‘post_type’ => ‘page’
  • );
  • $query = new WP_Query( $args );

获取自定义字段的 key 是 ‘color’ 并且 value 是 ‘blue’ 的文章:

  • $args = array(
  • ‘meta_key’ => ‘color’,
  • ‘meta_value’ => ‘blue’
  • );
  • $query = new WP_Query( $args );

获取自定义字段的 key 是 ‘color’ 并且 value 不是 ‘blue’ 的文章:

  • $args = array(
  • ‘meta_key’ => ‘color’,
  • ‘meta_value’ => ‘blue’,
  • ‘meta_compare’ => ‘!=’
  • );
  • $query = new WP_Query( $args );

获取自定义字段 key 为设定日期且 value 为现在的文章,就是显示还未过期的活动:

  • $args = array(
  • ‘post_type’ => ‘event’,
  • ‘meta_key’ => ‘event_date’,
  • ‘meta_value’ => date( “Ymd” ), // change to how “event date” is stored
  • ‘meta_compare’ => ‘>’,
  • );
  • $query = new WP_Query( $args );

获取其中自定义字段键为“价格”,小于或等于 22 的商品:

  • $args = array(
  • ‘meta_key’ => ‘price’,
  • ‘meta_value’ => ’22’,
  • ‘meta_compare’ => ‘<=’, ‘post_type’ => ‘product’
  • );
  • $query = new WP_Query( $args );

使用 ‘meta_value’ 参数的时候,值 99 将被视为大于 100,因为数据默认为“字符串”,而不是“数字”,如果是要对数字进行比较,请使用 ‘meta_value_num’ 参数。

通过一个自定义字段使用 meta_query 获取文章

  • $args = array(
  • ‘post_type’ => ‘product’,
  • ‘meta_query’ => array(
  • array(
  • ‘key’ => ‘color’,
  • ‘value’ => ‘blue’,
  • ‘compare’ => ‘NOT LIKE’,
  • ),
  • ),
  • );
  • $query = new WP_Query( $args );

特别注意下,使用 meta_query 的时候,需要传递嵌套数组,即使只有一个自定义字段查询的时候,也是一样。

通过多个自定义字段使用 meta_query 获取文章

获取 meta key ‘color’ NOT LIKE ‘blue’ 或者 ‘price’ BETWEEN 20 和 100 之间。

$args = array(
‘post_type’ => ‘product’,
‘meta_query’ => array(
array(
‘key’ => ‘color’,
‘value’ => ‘blue’,
‘compare’ => ‘NOT LIKE’,
),
array(
‘key’ => ‘price’,
‘value’ => array( 20, 100 ),
‘type’ => ‘numeric’,
‘compare’ => ‘BETWEEN’,
),
),
);
$query = new WP_Query( $args );

‘meta_query’ 支持多重嵌套,以便构建复杂的查询,比如获取 color=orange 或者 color=red&size=small 的商品:

$args = array(
‘post_type’ => ‘product’,
‘meta_query’ => array(
‘relation’ => ‘OR’,
array(
‘key’ => ‘color’,
‘value’ => ‘orange’,
‘compare’ => ‘=’,
),
array(
‘relation’ => ‘AND’,
array(
‘key’ => ‘color’,
‘value’ => ‘red’,
‘compare’ => ‘=’,
),
array(
‘key’ => ‘size’,
‘value’ => ‘small’,
‘compare’ => ‘=’,
),
),
),
);
$query = new WP_Query( $args );

以上就是如何通过自定义字段(post meta)参数查询WordPress文章的教程,谢谢大家参考学习。

“张承辉博客” WordPress教程:使用WP_Query进行文章查询 https://www.zhangchenghui.com/1653

(0)
上一篇 2022年1月19日 上午2:03
下一篇 2022年2月3日 下午3:45

相关推荐

  • WordPress标签页TAG链接打不开的解决方法

    使用Windows服务器的站长,在用WordPress程序建站的时候可能遇到tag链接打不开,返回404状态。这是因为WordPress暂时不支持中文编码,那就需要让WordPre…

    2021年7月19日
    00553
  • 站长创业项目:图片资源网站付费日入1000

    互联网赚不赚钱不要紧,但是我们要多多的学习。互联网可以挣钱的方式千千万万,无奇不有。今天就来给大家分享一个图片网站赚钱的项目。 说到网站,早在十几年前,甚至这几年网站依然是比较赚钱…

    2021年10月27日
    001.5K
  • 织梦官方致 DedeCMS 用户的公开信

    致广大 DedeCMS 用户的一封公开信 尊敬的用户: DedeCMS织梦内容管理系统,以开源、易用得到用户的青睐,基于DedeCMS而产生的生态,创造了较高的社会价值,而织梦官方…

    2021年9月30日
    00435
  • HTTPS是什么意思?HTTP与HTTPS的区别,以及HTTPS配置方法

    1 什么是HTTPS? HTTPS协议(Hyper Text Transfer Protocol over Secure Socket Layer,即超文本传输安全协议)。按照维基…

    2021年9月29日
    00536
  • SEO具体怎么优化?如何做好seo?

    很多站长做网站SEO优化的时候,喜欢去下载各种所谓SEO优化大牛的课程,学习一些所谓的SEO搜索优化细节,网站上线没几天就东改改西改改,没几天又下载另外一套,感觉又收获到了宝贝,又…

    2022年2月15日
    00229
  • 宝塔面板怎么搭建网站,宝塔面板建站教程

    宝塔面板就是用来方便和运维管理你的网站的。没有用宝塔面板之前,我是这样搭建网站的:用xshell等远程连接软件连接云服务器》手工安装PHP运行环境(LNMP_+LAMP_)或Jav…

    2021年8月9日
    00607

发表评论

登录后才能评论