WordPress 中最强大的工具之一就是为文章添加自定义字段的功能。许多开发人员使用 Advanced Custom Fields 或自定义文章元字段。您可以使用 WordPress 内置的元查询功能来查询 WordPress 网站上的自定义字段。
在本篇博文中,我们将介绍如何使用 WordPress 中的 meta_query
函数按自定义字段查询文章。这对拥有大量自定义功能的网站很有帮助。请记住,您需要熟悉 PHP。
通过元值查询文章
使用自定义字段查询文章最常用的方法可能就是针对一个特定的元值。
例如,假设我们有一个网站,其中的文章有一个自定义字段,用于确定文章是否是 “featured” 文章。这在 WordPress 网站制作特色版块时很常见。
<?php $meta_query_args = array( 'meta_query' => array( array( 'key' => 'featured_post', 'value' => 'yes', 'compare' => '=' ) ) ); $meta_query = new WP_Query( $meta_query_args );
当然,上述代码会根据您的字段标题和 postmeta 关键字而有所不同,但 meta_query 参数中的 “key” 是自定义字段的名称。而 “value” 则是我们查询文章的匹配值。compare” 字段用于一系列比较操作,我们将在后面的文章中详述。
在 WP_Query 中使用这个字段可以得到一个数组,非常适合循环函数来显示文章。在这篇文章中,我们将只介绍 meta_query 函数,而不是如何显示 WP_Query 输出。
通过多个元值查询文章
如果要根据多个元键值检查一个元键值,最好使用 “IN” 操作符。这可以通过在元查询中使用数组 “value” 来实现。
<?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 );
通过多个元关键字查询文章
既然我们已经用单个元关键字查询了文章,那么现在就来用多个字段/关键字查询文章。这样就可以根据多个自定义字段来查询文章。本示例通过将查询嵌套到数组中并在元查询中添加 “relation”,将上述两种方法结合起来。
<?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 );
“relation” 字段可设置为 “AND” 或 “OR”,因此您可以要求满足所有条件或仅满足一个条件。
在日期之间查询文章
在使用元查询获取 WordPress 文章时,另一种常用的查询方式是查询日期。下面介绍如何只查询两个日期之间的文章。
此功能假定日期的格式为 YYYY-MM-DD 结构。如果您使用的是高级自定义字段,请确保您的返回日期格式设置为该格式。
<?php $meta_query_args = array( 'meta_query' => array( array( 'key' => 'my_date_field', 'value' => array( '2022-01-01', '2022-12-31' ), 'type' => 'date', 'compare' => 'BETWEEN' ) ) ); $meta_query = new WP_Query( $meta_query_args );
如果您使用的是 Unix 时间戳,那么查询日期之间的文章就更容易了。此代码片段将把日期转换为 Unix 时间戳,并在两者之间进行比较。
<?php $meta_query_args = array( 'meta_query' => array( array( 'key' => 'my_date_field', 'value' => array( strtotime('2022-01-01'), strtotime('2022-12-31') ), 'type' => 'numeric', 'compare' => 'BETWEEN' ) ) ); $meta_query = new WP_Query( $meta_query_args );
当然,您也可以在上述查询中使用大于或小于操作符来查找某个日期之前/之后的文章。
元查询比较运算符
有几个运算符对通过元查询来查询文章很有帮助。下面是每个比较运算符的快速分解以及使用方法。
- ‘=’:查询与元值相等的元键
- ‘!=’:查询不等于元值的元键
- ‘>’:查询大于元值的元键
- ‘>=’:查询大于等于元值的元键
- ‘<‘:查询小于元值的元键
- ‘<=’:查询小于等于元值的元键
- ‘LIKE’:查询包含单词/短语的元键(例如,查询 “red “将匹配 “Red”、”looksred” 和 “redstyle” 等短语)
- ‘NOT LIKE’:与上述相反
- ‘IN’:查询数组中存在值的元键
- ‘NOT IN’:查询值不存在于数组中的元键
- ‘BETWEEN’:查询值位于两个数字之间的元键
- ‘NOT BETWEEN’:查询值不在两个数字之间的元键
- ‘EXISTS’:查询元键中的值是否存在
- ‘NOT EXISTS’:查询值根本不存在的元键
- ‘REGEXP’:根据正则表达式查询元键
- ‘NOT REGEXP’:与上述 REGEXP 相反
请记住,如果你没有向 meta_query 输入数组,就需要在 WP_Query 参数中使用 meta_compare。
如何根据元字段排序文章
当然,WordPress 允许您使用 WP_Query 中的 “orderby” 选项,使用自定义字段对文章进行排序。使用 WP_Query 参数中的 orderby 参数就可以轻松实现这一功能。
您需要将 “orderby” 设置为 “meta_value”,然后将 “meta_key” 值设置为您的字段名。默认情况下,如果希望查询按字母顺序返回,或字段为数字时按数字排序,这个参数最有用。
当然,您也可以将 WP_Query 的 “post_type” 参数设置为 “post”、”page” 或自定义的文章类型值。
<?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 );
如果您的元关键字段是一个数字,您需要在 orderby 中使用 “meta_value_num” 值来向 WordPress 表明它是一个整数。
恭喜你,作为 WordPress 开发人员,你刚刚提升了自己的水平。
在 WordPress 中构建自定义功能时,学习元查询是一个非常强大的工具。WordPress 会将元查询中的参数转化为 SQL 并查询数据库。如果您要创建任何自定义功能,建议使用 WordPress 内置函数,而不是硬编码 MySQL 查询。
如果您想加深对 WordPress 的了解,我建议您查看 WP_Query 的文档。