WordPress Meta_Query:你需要知道的一切

已发表: 2022-04-30

WordPress 中最强大的工具之一是能够向帖子添加自定义字段。 许多开发人员使用高级自定义字段或自定义元字段来发布帖子。

在这篇文章中,我们将讨论如何使用 WordPress 中的 meta_query 函数通过自定义字段查询帖子。 这对于具有大量自定义功能的站点很有帮助。


按元值查询帖子

使用自定义字段查询帖子的最流行方法可能是针对一个特定的元值。 例如,假设我们有一个网站,其中的帖子有一个自定义字段,用于确定帖子是否是“精选”。 这在 WordPress 网站上制作特色部分时很常见。

<?php
$ meta_query_args = array (
'meta_query' => array (
array (
'key' => 'featured_post' ,
'value' => 'yes' ,
'compare' => '='
)
)
);
$ meta_query = new WP_Query ( $ meta_query_args );
view raw wordpress-query-post-meta-value.php hosted with by GitHub

当然,上面的代码会根据您对字段和元键的标题而有所不同,但“键”是自定义字段的名称,而“值”是我们查询帖子的内容。 “比较”字段用于一系列比较操作,我们将在后面的文章中介绍。

在 WP_Query 中使用它可以让我们获得一个非常适合循环函数显示帖子的数组。 在这篇文章中,我们将只讨论 meta_query 函数,而不是如何显示 WP_Query 输出。


通过多个元值查询帖子

如果您想根据多个值检查元键值,最好使用“IN”运算符。

<?php
$ meta_query_args = array (
'meta_query' => array (
array (
'key' => 'city_name' ,
'value' => array ( 'New York City' , 'London' , 'San Francisco' ),
'compare' => 'IN'
)
)
);
$ meta_query = new WP_Query ( $ meta_query_args );
view raw wordpress-query-post-meta-value-multiple.php hosted with by GitHub

通过多个元键查询帖子

现在我们已经使用单个元键查询了帖子,让我们来查询多个字段/键。 这将允许您基于多个自定义字段查询帖子。 这个例子结合了我们上面所做的两件事,将查询嵌套到一个数组中,并向 meta_query 添加一个“关系”。

<?php
$ meta_query_args = array (
'meta_query' => array (
'relation' => 'AND' ,
array (
array (
'key' => 'city_name' ,
'value' => array ( 'New York City' , 'London' , 'San Francisco' ),
'compare' => 'IN'
),
array (
'key' => 'featured_post' ,
'value' => true ,
'compare' => '='
)
)
)
);
$ meta_query = new WP_Query ( $ meta_query_args );
view raw wordpress-meta-query-multiple-keys.php hosted with by GitHub

“关系”字段可以设置为“与”或“或”,因此您可以要求满足所有条件或仅满足一个条件。


元查询比较运算符

有一些运算符有助于通过元查询查询您的帖子。 以下是每个比较运算符的快速细分以及如何使用它们。

  • '='查询等于元值的元键
  • '!='查询不等于元值的元键
  • '>'查询大于元值的元键
  • '>='查询大于 & 等于元值的元键
  • '<'查询小于元值的元键
  • '<='查询小于 & 等于元值的元键
  • 'LIKE'查询包含单词/短语的元键(例如查询“red”将匹配短语“Red”、“looksred”和“redstyle”)
  • '不喜欢'与上述相反
  • 'IN'查询值存在于数组中的元键
  • 'NOT IN'查询值不存在于数组中的元键
  • 'BETWEEN'查询值在两个数字之间的元键
  • 'NOT BETWEEN'查询值不在两个数字之间的元键
  • 'EXISTS'查询值存在的元键
  • 'NOT EXISTS'查询值根本不存在的元键
  • 'REGEXP'基于正则表达式查询元键
  • 'NOT REGEXP'与上述 REGEXP 相反

如何按元字段对帖子进行排序

当然,WordPress 允许您使用 WP_Query 中的“orderby”选项使用自定义字段对帖子进行排序。 您需要将“orderby”设置为“meta_value”,然后将“meta_key”值设置为您的字段名称。 默认情况下,当您的字段是数字时,当您希望查询按字母顺序返回或按数字排序时,这是最有用的。

<?php
$ meta_query_args = array (
'post_type' => 'page' ,
'order' => 'ASC' ,
'meta_key' => 'city_name' ,
'orderby' => 'meta_value'
);
$ meta_query = new WP_Query ( $ meta_query_args );
view raw wordpress-orderby-meta-query.php hosted with by GitHub