在本系列的较早部分中,您已经了解了WP_Query
的结构以及其属性和方法。 下一阶段是了解可以使用它的各种参数以及最佳方法。
WP_Query
具有大量可能的参数,这使其非常灵活。 由于您可以使用它查询几乎所有wp_posts
表中保存的wp_posts
,因此它为您可能希望在内容上运行的每个查询排列提供参数。
在本教程中,我将研究两种类型的参数,分别是:
- 类别
- 标签
这两种分类法的论点是相似的,但是确实存在一些差异,您需要了解它们是否要有效地使用它们。
WP_Query中的参数工作原理回顾
在开始之前,让我们快速回顾一下WP_Query
参数如何工作。 在主题或插件中编码WP_Query
时,需要包括四个主要元素:
- 查询参数,使用本教程将介绍的参数
- 查询本身
- 循环
- 完成:重置发布数据
实际上,这将类似于以下内容:
<?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可能不会将所有参数添加到查询中,或者会出现白屏。
类别参数
让我们从类别参数开始。 您在此处具有的选项如下:
-
cat
( int ):使用类别ID。 -
category_name
( string ):使用类别slug(非名称)。 -
category__and
( array ):使用类别ID。 -
category__in
( 数组 ):使用类别ID。 -
category__not_in
( array ):使用类别ID。
请注意,对于这些都不使用类别名称。 甚至category_name
参数也将“段”作为其值,而不是其名称。 我倾向于使用此代码而不是ID,因为稍后再返回代码时,与ID相比,easier更容易识别。 但是,如果您认为您的站点用户可能会更改一个或多个类别的标签,建议您使用ID以避免任何问题。
让我们看一下如何使用它们。
猫参数
cat
参数很简单:只需使用一个类别ID或一串类别ID。
查询一个类别看起来像这样:
$args = array(
'cat' => '12'
);
查询多个类别如下所示:
$args = array(
'cat' => '12, 13, 14'
);
上面的内容将告诉WordPress获取列出的任何类别的帖子。 如果要在类别数组的每个类别中查找帖子,请使用category_and
参数,该参数的使用时间更短。
您还可以使用cat参数来查找属于一个类别而不属于另一类别的帖子,方法是在类别ID之前使用减号,如下所示:
$args = array(
'cat' => '12, -13'
);
以上将查询类别12
帖子,但不查询类别13
帖子。
category_name参数
category_name
参数使用类别标签,而不使用名称(令人困惑,我知道!)。 同样,您可以将其与单个类别或一串类别一起使用,以查找任何类别中的帖子。
要查询单个类别的帖子,请添加:
$args = array(
'category_name' => 'my-slug'
);
要查找多个类别中一个或多个类别的帖子,请使用以下方法:
$args = array(
'category_name' => 'my-slug, your-slug, another-slug'
);
与cat参数一样,它不会找到所有类别中的帖子,但会找到任何类别中的帖子。
类别__和参数
如果要查找所有类别数组中的帖子,则使用此参数。 它使用类别ID作为其值。 因此,要查找所有三个类别的帖子,可以使用:
$args = array(
'category__and' => array(
'12',
'13',
'14'
)
);
请注意,这使用的是数组而不是字符串,因此您对它进行了不同的编码。 该参数的名称中有两个下划线:仅使用一个下划线,它将不起作用。
参数中的类别__
下一个参数在一个或多个类别数组中查找帖子。 它实际上以与cat参数相同的方式工作,并且还使用类别ID作为其值。
因此,要查询一个或多个类别数组中的帖子,可以使用:
$args = array(
'category__in' => array(
'12',
'13',
'14'
)
);
以上内容将从这些类别中的一个或多个类别中获取帖子。
category__not_in参数
category__not_in
参数的作用与您预期的一样:它查询不在类别或类别数组中的帖子。
要从一个类别中排除帖子,您将使用以下内容:
$args = array(
'category__not_in' => '12'
);
并从一系列类别中排除帖子:
$args = array(
'category__not_in' => array(
'12',
'13',
'14'
)
);
这将不包括任何这些类别的帖子。
标签参数
标签与类别的参数略有不同:恐怕您无法根据对类别参数的了解来确定标签可能是什么!
标签参数为:
-
tag
( 字符串 ):使用标签塞。 -
tag_id
( int ):使用标签ID。 -
tag__and
( array ):使用标签ID。 -
tag__in
( array ):使用标签ID。 -
tag__not_in
( array ):使用标签ID。 -
tag_slug__and
( array ):使用标签块。 -
tag_slug__in
( array ):使用标签块
让我们看看其中的每一个。
标签参数
tag
参数使用tag slug作为其值,可用于查找带有一个标签或带有任何标签字符串的帖子。
因此,要查找带有一个标签的帖子,请使用:
$args = array(
'tag' => 'my-tag'
);
并从标签数组中查找带有标签的帖子:
$args = array(
'tag' => 'my-tag, your-tag, another-tag'
);
请注意,以上查询发布的是数组中的任何标签,而不是全部。
tag_id参数
tag_id
参数的工作方式与cat
参数的工作方式类似:它获取标签ID,并且可以与单个标签或多个标签一起使用。
要查找带有单个标签的帖子,请使用以下命令:
$args = array(
'tag_id' => '21'
);
要从一串标签ID中查找带有一个或多个标签的帖子,请执行以下操作:
$args = array(
'tag_id' => '21, 22, 23'
);
当将其用于单个标签或多个标签时,也可以使用tag_id
排除标签。
因此,要查询除具有给定标签的帖子以外的帖子,请使用:
$args = array(
'tag_id' => '-21'
);
在查找带有两个标签之一但没有另一个标签的帖子时,可以使用以下方法:
$args = array(
'tag_id' => '21, -22, 23'
);
因此,以上内容将查询带有标签21
或23
之一或全部但不包含标签22
帖子。
tag__in参数
使用此参数可以查找带有一个或多个标签数组的帖子。 与数组一起使用时,其作用与tag
相同:
$args = array(
'tag_in' => array(
'21',
'22',
'23'
)
);
这将查询具有列出的任何或所有标签的帖子。 如果要查找包含所有标签的帖子,请使用tag__and
,稍后我将介绍。
tag__not_in参数
使用tag__not_in
参数可以查询没有给定标签或标签数组的帖子。
像这样使用它来排除一个标签:
$args = array(
'tag__not_in' => array( '21' )
);
请注意,即使只使用一个标签,仍然需要使用数组。 有关更多标签,请使用:
$args = array(
'tag__not_in' => array(
'21',
'22',
'23'
)
);
这将查询没有以上任何标签的帖子。
参数tag_slug__and和tag_slug__
这两个参数的行为与tag__and
和tag__in
参数tag__in
,不同之处在于,您在数组中使用该标签段而不是标签ID。
例如,要查找同时具有两个标签的帖子,可以使用tag__slug_in
:
$args = array(
'tag_slug__in' => array(
'my-tag',
'your-tag',
'another-tag'
)
);
这将查找具有任何这些标签的帖子。 您还可以将tag参数与一串标记段一起使用,以达到相同的结果。
要包含具有所有标签集的帖子,请使用tag_slug__and
:
$args = array(
'tag_slug__and' => array(
'my-tag',
'your-tag',
'another-tag'
)
);
不会查询带有任何标签的帖子,而是仅查询具有所有标签的帖子。
摘要
通过类别和/或标签查询帖子是您很有可能会使用WP_Query
进行操作的WP_Query
。 通过使用上述参数,并在必要时进行组合,您可以创建功能强大的参数以从数据库中准确提取所需的数据。
翻译自: https://code.tutsplus.com/tutorials/wp_query-arguments-categories-and-tags--cms-23070