WP_Query参数:类别和标签

在本系列的较早部分中,您已经了解了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可能不会将所有参数添加到查询中,或者会出现白屏。

类别参数

让我们从类别参数开始。 您在此处具有的选项如下:

  • catint ):使用类别ID。
  • category_name  string ):使用类别slug(非名称)。
  • category__andarray ):使用类别ID。
  • category__in数组 ):使用类别ID。
  • category__not_inarray ):使用类别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_idint ):使用标签ID。
  • tag__andarray ):使用标签ID。
  • tag__inarray ):使用标签ID。
  • tag__not_inarray ):使用标签ID。
  • tag_slug__andarray ):使用标签块。
  • tag_slug__inarray ):使用标签块

让我们看看其中的每一个。

标签参数

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'
);

因此,以上内容将查询带有标签2123之一或全部但不包含标签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__andtag__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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值