如果您一直在学习本系列文章,那么您将了解WP_Query
的结构以及如何使用它编写自定义查询。 为了定义WP_Query
从数据库中获取的内容,您需要知道可以用于查询数据的参数。
WP_Query
具有大量可能的参数,这使其非常灵活。 由于您可以使用它查询几乎所有wp_posts
表中保存的wp_posts
,因此它为您可能希望在内容上运行的每个查询排列提供参数。
在本教程中,我将研究自定义字段的参数。 但是首先,快速回顾一下如何在WP_Query
编码参数。
WP_Query中的参数工作原理回顾
在开始之前,让我们快速回顾一下WP_Query
参数如何工作。 在主题或插件中编码WP_Query
时,需要包括四个主要元素:
- 查询参数,使用本教程将介绍的参数
- 查询本身
- 循环
- 完成:关闭
if
和while
标签并重置发布数据
实际上,这将类似于以下内容:
<?php
$args = array(
// Arguments for your query.
);
// Custom query.
$query = new WP_Query( $args );
// Check that we have query results.
if ( $query->have_posts() ) {
// Start looping over the query results.
while ( $query->have_posts() ) {
$query->the_post();
// Contents of the queried post results go here.
}
}
// Restore original post data.
wp_reset_postdata();
?>
这些参数告诉WordPress从数据库中获取哪些数据,这就是我将在此处介绍的数据。 因此,我们在这里只关注代码的第一部分:
$args = array(
// Arguments for your query.
);
如您所见,参数包含在数组中。 在学习本教程时,您将学习如何对它们进行编码。
编写您的论点
有一种特定的方式可以对数组中的参数进行编码,如下所示:
$args = array(
'parameter1' => 'value',
'parameter2' => 'value',
'parameter3' => 'value'
);
您必须将参数及其值用单引号引起来,并在它们之间使用=>
,并用逗号分隔。 如果您弄错了,WordPress可能不会将所有参数添加到查询中,或者会出现白屏。
自定义字段参数
自定义字段(也称为发布元数据)可以使用称为WP_Meta_Query
的单独类。 这意味着如果只想对帖子元数据运行查询,则可以使用WP_Meta_Query
或WP_Query
(访问WP_Meta_Query
),而如果要查询帖子元数据和其他项目(如帖子类型),则可以使用WP_Query
。
WP_Meta_Query
类在本系列的其他地方进行了详细介绍,因此在此不做详细介绍,但是使用WP_Query
和WP_Query
之间的主要区别在于WP_Query
允许您创建一些简单的参数而不使用嵌套数组。
简单自定义字段查询的参数
使用WP_Query
查询自定义字段的主要参数如下:
-
meta_key
( 字符串 ):自定义字段密钥。 -
meta_value
( 字符串 ):自定义字段值。 -
meta_value_num
( number ):自定义字段值。 -
meta_compare
( 字符串 ):用于测试'meta_value'
运算符。 可能的值是'='
,'!='
,'>'
,'>='
,'<'
,'<='
,'LIKE'
,'NOT LIKE'
,'IN'
,'NOT IN'
,'BETWEEN'
,'NOT BETWEEN'
,'NOT EXISTS'
,'REGEXP'
,'NOT REGEXP'
或'RLIKE'
。 默认值为'='
。
使用这些参数进行简单的自定义字段查询。 因此,例如,要输出具有自定义字段且键为key1
帖子(无论其值如何),请使用以下参数:
$args = array(
'meta_key' => 'key1'
);
这将返回所有带有key1
键的自定义字段的帖子,无论其值如何。
如果要指定一个值,则可以为此添加一个额外的参数:
$args = array(
'meta_key' => 'key1',
'meta_value' => 'value1'
);
这将返回所有包含带有key1
键及其value1
值的自定义字段的帖子。
或者,您可以获取具有值value1
的自定义字段的所有帖子,而与键无关。 如果您有多个具有重复值的自定义字段键,这可能会很有用:
$args = array(
'meta_value' => 'value1'
);
如您所见,您可以仅查询自定义字段的键或值,而不必总是同时指定两者。
使用meta_compare参数
上面您可能已经注意到meta_compare
参数有很多潜在参数,并且它们的使用可能并不总是显而易见的。 让我们看一下您最常使用的那些:
-
=
:等于。 这是默认设置,因此,如果不包含meta_compare
参数,则将使用WP_Query。 -
!+
:不等于。 -
>
:大于。 -
>=
:大于或等于。 -
<
:小于。 -
<=
:小于或等于。 -
LIKE
:这将忽略您使用的值的大小写,并且您也可以将其与通配符一起使用,以查找类似于您要查找的值的值。 -
NOT LIKE
:以与喜欢类似的方式工作,但查询相反! -
IN
:将此值与“值”参数中的数组一起使用,以查找具有数组中一个或多个值的帖子。 -
BETWEEN
:与两个数值数组(在meta_value
参数中指定)一起使用,以查找在这些值之间(但不等于它们)的自定义字段值的帖子。 -
NOT BETWEEN
:查询中包含具有自定义字段值的帖子,这些字段位于由meta_value
参数指定的两个数值数组之外。
让我们看一下该参数的一些示例用法。
首先,您可以使用meta_compare
参数排除自定义字段键或值。 因此,要获取除具有key1
键的具有自定义字段的帖子以外的所有帖子,请使用以下命令:
$args = array(
'meta_key' => 'key1',
'meta_compare' => '!='
);
您还可以对meta_compare
参数使用'NOT IN'
值,该参数也可以与多个值的字符串一起使用:
$args = array(
'meta_key' => 'key1, key2',
'meta_compare' => 'NOT IN'
);
这将查询没有带有key1
或key2
值的自定义字段的帖子。 如果您想更具体一些,例如查询具有一个自定义字段而不是另一个自定义字段的帖子,则可以使用嵌套数组,稍后我们将介绍它。
上面的示例使用非数值。 您可以将WP_Query
与具有数字值的自定义字段一起使用,不仅可以获取具有该值的自定义字段的帖子,还可以获取具有较高或较低值的自定义字段的帖子。 例如,如果要查找高于或低于给定价格的商品,则可以在商店中使用此商品。
要查找具有超过给定数字的自定义字段值的帖子,请使用类似以下的内容:
$args = array(
'meta_key' => 'numkey',
'meta_value' => '100',
'meta_compare' => '>'
);
这将返回所有带有numkey
键且值超过100
的自定义字段的numkey
。 如果要查询100或'meta_compare' => '>='
值,可以使用'meta_compare' => '>='
。
您还可以查找其自定义字段的值介于您使用BETWEEN
参数和一个数组指定的两个数字之间的帖子:
$args = array(
'meta_key' => 'numkey',
'meta_value' => array (
'100',
'200'
),
'meta_compare' => 'BETWEEN'
);
这将在numkey
自定义字段中找到值在100到200之间的所有帖子。
嵌套的自定义字段查询
如果要查询多个自定义字段或使用多个运算符,则可以使用嵌套数组。
它们采用以下结构:
$args = array(
'meta_query' => array(
'relation' => '', // Optional argument.
array(
// `meta_query` arguments go here.
)
)
);
在WP_Query
构造'meta_query'
参数的方式与使用WP_Meta_Query
类的方式WP_Meta_Query
,本系列的后续教程中对此进行了介绍,因此在此不再赘述。
从WordPress 4.1开始,您还可以使用多层嵌套数组来创建更复杂,更精确的查询。 这些看起来像这样:
$args = array(
'meta_query' => array(
'relation' => '', // Optional argument.
array(
'relation' => '',
array (
// First set of `meta_query` arguments go here.
),
array (
// Second set of `meta_query` arguments go here.
)
)
)
);
这使您可以在查询的不同级别上使用不同的关系,例如查询一个自定义字段键中具有值或另一个自定义字段键中具有两个值的帖子。 本系列教程的WP_Meta_Query
类教程中的示例对此进行了详细介绍。
摘要
使用WP_Query
类查询帖子的元数据(或自定义字段)可以为您提供很大的灵活性,可以将多个潜在参数与多个运算符结合使用,以完全按照您想要的方式来查询数据库。
如果只想在查询中使用帖子元数据参数(而不是与其他参数(例如,帖子类型)结合使用),则还可以使用WP_Meta_Query
类,本系列后面的内容将对此进行介绍。
翻译自: https://code.tutsplus.com/tutorials/wp_query-arguments-custom-fields--cms-23091