>  기사  >  백엔드 개발  >  WP_Query 매개변수를 사용하여 분류 필터링

WP_Query 매개변수를 사용하여 분류 필터링

王林
王林원래의
2023-09-01 15:49:071575검색

이 시리즈에서는 함께 사용되는 다양한 매개변수와 이를 인코딩하는 방법에 대해 WP_Query 的结构及其属性和方法。现在我们正在研究可与 WP_Query 배웠습니다.

WP_Query 有大量可能的参数,这使得它极其灵活。由于您可以使用它来查询 wp_posts 모든 것이 테이블에 저장되므로 콘텐츠에 대해 실행하려는 모든 쿼리에 대한 매개변수 순열이 있습니다.

이 튜토리얼에서는 분류 용어를 쿼리하기 위한 매개 변수에 대해 알아봅니다.

  • 분류 매개변수
  • 분류 용어 쿼리
  • 카테고리에서 여러 용어를 쿼리하세요
  • 여러 카테고리의 검색어
  • 중첩 분류 쿼리

phpcnc의 매개변수 작동 방식 검토 phpcn>WP_Query

시작하기 전에 WP_Query<code class="inline">WP_Query 中的工作原理。当您在主题或插件中编写 WP_Query에서 매개변수가 어떻게 작동하는지 빠르게 살펴보겠습니다. 테마나 플러그인에 WP_Query

를 작성할 때 다음 네 가지 주요 요소를 포함해야 합니다.
  • 쿼리 매개변수, 이 튜토리얼에서 소개할 매개변수를 사용하세요
  • 쿼리 자체
  • 루프
  • if 和 class="inline">whileEnd: if
class="inline">while

태그를 닫고 게시물 데이터 재설정

실제로는 다음과 같습니다.

으아악

이 매개변수는 WordPress에 데이터베이스에서 가져올 데이터를 알려줍니다. 여기서는 이에 대해 다루겠습니다. 그래서 여기서 우리가 집중하고 있는 것은 코드의 첫 번째 부분입니다:

으아악

보시다시피 매개변수는 배열에 포함되어 있습니다. 이 튜토리얼을 따라가다 보면 코딩 방법을 배우게 됩니다.

매개변수를 작성하세요

=>배열의 매개변수에는 다음과 같은 특정 인코딩 방법이 있습니다.

으아악

매개변수와 해당 값을 작은따옴표로 묶고, 매개변수 사이에 =>

를 사용하고, 쉼표로 구분해야 합니다. 이 실수를 하면 WordPress에서 쿼리에 모든 매개변수를 추가하지 못할 수 있습니다. 그렇지 않으면 흰색 화면이 나타날 수 있습니다.

tax_query 분류 매개변수

    tax_query<li>를 사용하고 있으므로 분류 용어에 대한 매개변수 설정은 카테고리 및 태그에 대한 매개변수 설정보다 조금 더 복잡합니다. 이 매개변수에서는 다음을 사용하여 분류법과 용어를 지정하는 중첩된 매개변수 배열을 작성할 수 있습니다. <strong> <code class="inline">分类法 분류(String):
  • 분류 field (string): 选择分类术语 ('term_id (默认), 'name''slug'
  • field<li>(<strong>string<code class="inline">terms): 분류 용어 선택('term_id(기본값), 'name' 또는 '슬러그' )
  • include_childrenterms<em> (</em>int/string/array):
  • 카테고리 용어
  • operator (string): 要测试的运算符。可能的值为 'IN' (默认)、'NOT IN''AND''EXISTS'、和 “不存在”include_children
  • (
boolean

): operator 参数这一事实意味着您无需从一系列可用参数中进行选择来定义是包含还是排除术语(就像对标签所做的那样)和类别),但可以使用 tax_query 계층적 분류의 하위 항목을 포함할지 여부입니다. 기본값은 true입니다.

relation 参数,其中 AND ORoperator

(

string

):

테스트할 연산자입니다. 가능한 값은 'IN'

(기본값), 'NOT IN'<p>, <code class="inline">'AND'

, 'EXISTS'<p> 및 <code>"존재하지 않습니다"<img src="https://img.php.cn/upload/article/000/465/014/169355456062921.jpg" alt="WP_Query 매개변수를 사용하여 분류 필터링">.

category 分类中包含 tutorial 术语的帖子。请注意,您还需要使用 field operator

매개변수가 있다는 사실은 용어를 포함할지 제외할지 정의하기 위해 사용 가능한 다양한 매개변수 중에서 선택할 필요가 없다는 것을 의미합니다(태그 및 카테고리에서와 마찬가지로). , 그러나 tax_query<p>를 사용하여 모든 분류 관련 콘텐츠를 대체할 수 있습니다. <img src="https://img.php.cn/upload/article/000/465/014/169355456012868.jpg" alt="WP_Query 매개변수를 사용하여 분류 필터링"> </p>여러 분류법을 쿼리하려는 경우 <code class="inline">AND <p> 또는 relation</p> 매개변수를 사용할 수도 있습니다. "inline">OR<h3> 모든 용어가 포함된 게시물을 찾을지 아니면 일부만 찾을지 지정합니다. </h3> <p>이것은 몇 가지 예를 통해 쉽게 설명할 수 있습니다. </p> 🎜 분류 용어 쿼리🎜 🎜이것은 중첩 배열을 사용하는 가장 간단한 시나리오입니다. 🎜 으아악 🎜🎜🎜 🎜위 쿼리는 <code class="inline">category🎜 카테고리에 <code>tutorial🎜이라는 용어가 포함된 게시물에 대한 것입니다. 또한 기본 용어 ID를 사용하지 않는 한 용어를 식별하는 데 사용하는 필드를 식별하려면 <code class="inline">field🎜 매개변수를 사용해야 합니다. 용어 ID를 사용하려면 다음과 같이 사용할 수 있습니다. 🎜 으아악 🎜🎜🎜 🎜ID를 사용하면 나중에 쿼리가 찾고 있는 내용을 판단하기가 더 어려워지지만 사용자가 슬러그라는 용어를 편집할 수 있다고 생각되면 잠재적인 문제를 피할 수 있습니다. 🎜 🎜 카테고리에서 여러 용어를 쿼리하세요🎜 🎜동일한 카테고리에 하나 이상의 용어 배열이 있는 게시물을 식별하려는 경우에도 중첩 배열을 작성하고 용어 집합을 추가할 수 있습니다. 🎜 <p>例如,要查询包含分类中<em>任何</em>术语 ID 列表的帖子,您可以使用:</p> <pre class="brush:php;toolbal:false;">$args = array( 'tax_query' =&gt; array( array( 'taxonomy' =&gt; 'post_tag', 'terms' =&gt; [14, 17] ) ) ); </pre> <p><img src="https://img.php.cn/upload/article/000/465/014/169355456148575.jpg" alt="WP_Query 매개변수를 사용하여 분류 필터링"></p> <p>但是如果您想查询包含这些术语的<em>所有</em>帖子怎么办?您需要在嵌套数组中使用 <code class="inline">operator 参数:

$args = array(
    'tax_query' => array(
        array(
            'taxonomy' => 'post_tag',
            'terms' => [14, 17],
            'operator' => 'AND'
        )
    )
);

WP_Query 매개변수를 사용하여 분류 필터링

请注意,第一个示例实际上使用 IN 运算符来查找包含任何术语的帖子,但由于这是默认值,因此您不必在参数中指定它。 p>

另一种情况是,如果您想要查询在一个分类中没有任何术语数组的帖子,您可以这样做:

$args = array(
    'tax_query' => array(
        array(
            'taxonomy' => 'post_tag',
            'terms' => [14, 17],
            'operator' => 'NOT IN'
        )
    )
);

WP_Query 매개변수를 사용하여 분류 필터링

在这里,我将 AND 运算符替换为 NOT IN,这意味着 WordPress 将查找数组中不包含任何术语的帖子。

请注意,如果您更喜欢使用 slugs 而不是术语 ID,则可以在任何这些场景中执行此操作。最后一个示例如下所示:

$args = array(
    'tax_query' => array(
        array(
            'taxonomy' => 'post_tag',
            'field' => 'slug',
            'terms' => ['php', 'strings'],
            'operator' => 'NOT IN'
        )
    )
);

WP_Query 매개변수를 사용하여 분류 필터링

从多个分类中查询术语

如果您想要使用多个分类法,则需要创建多个数组。让我们看一个最简单的示例,查询包含类别分类中的一个术语标签分类中的一个术语的帖子:

$args = array(
    'tax_query' => array(
        'relation' => 'AND',
        array(
            'taxonomy' => 'category',
            'field' => 'slug',
            'terms' => ['tutorial']
        ),
        array(
            'taxonomy' => 'post_tag',
            'field' => 'slug',
            'terms' => ['javascript']
        )
    )
);

WP_Query 매개변수를 사용하여 분류 필터링

在这里,我编写了两个嵌套数组:每个分类法一个,使用与仅使用一种分类法的示例相同的参数。我在这些之前添加了 relation 参数。您需要包含 relation 参数来告诉 WordPress 是否正在查找每个数组输出的全部或部分帖子。其工作原理如下:

  • 如果您使用 'relation' => 'AND',WordPress 将获取第一个数组第二个数组中指定的帖子。因此,在上面的示例中,仅发布两者 类别中的 <code>tutorial slug 和 中的 <code class="inline">javascript slug post_tag 将被查询。
  • 如果您使用 'relation' => 'OR',WordPress 将获取第一个数组第二个数组输出的帖子。因此,在这种情况下,您将收到带有 tutorial slug 或 javascript slug(或两者)的帖子。

如果您正在寻找包含这两个标签之一的帖子,则可以使用以下代码:

$args = array(
    'tax_query' => array(
        'relation' => 'OR',
        array(
            'taxonomy' => 'category',
            'field' => 'slug',
            'terms' => ['tutorial']
        ),
        array(
            'taxonomy' => 'post_tag',
            'field' => 'slug',
            'terms' => ['javascript']
        )
    )
);

WP_Query 매개변수를 사용하여 분류 필터링

您还可以通过将给定分类法添加到数组中来查找多个术语:

$args = array(
    'tax_query' => array(
        'relation' => 'OR',
        array(
            'taxonomy' => 'category',
            'field' => 'slug',
            'terms' => ['guide']
        ),
        array(
            'taxonomy' => 'post_tag',
            'field' => 'slug',
            'terms' => ['php', 'strings']
        )
    )
);

WP_Query 매개변수를 사용하여 분류 필터링

通过将 relation 参数与查询相结合,并使用 operator 参数,您可以创建复杂的查询。下面的参数将查询包含一个分类中的术语但不包含另一个分类中的术语的帖子:

$args = array(
    'orderby' => 'title',
    'tax_query' => array(
        'relation' => 'AND',
        array(
            'taxonomy' => 'category',
            'field' => 'slug',
            'terms' => ['tutorial'],
            'operator' => 'NOT IN'
        ),
        array(
            'taxonomy' => 'post_tag',
            'field' => 'slug',
            'terms' => ['php', 'math'],
            'operator' => 'AND'
        )
    )
);

WP_Query 매개변수를 사용하여 분류 필터링

请注意,我在这里使用了 'relation' => 'AND' :如果我使用 OR,它将使用 slug-two 没有 slug-one 的帖子,而不是有 slug-two 但没有 slug 的帖子-one,这就是我正在寻找的。​​p>

您可以根据需要进一步查询分类法的术语:在两个嵌套查询中使用 operator 参数,或添加额外的嵌套查询来查询另一个分类法中的术语。

嵌套分类查询

您可以创建嵌套分类查询来创建更复杂的过滤器来获取您的帖子。在 4.1 版本中,WordPress 核心添加了对嵌套分类法的支持。更早地获得类似的结果要么要复杂得多,要么根本不可能。

$args = array(
    'tax_query' => array(
        'relation' => 'OR',
        array(
            'taxonomy' => 'category',
            'field' => 'slug',
            'terms' => ['guide'],
        ),
        array(
            'relation' => 'AND',
            array(
                'taxonomy' => 'category',
                'field' => 'slug',
                'terms' => ['tutorial'],
            ),
            array(
                'taxonomy' => 'post_tag',
                'field' => 'slug',
                'terms' => ['php', 'strings'],
                'operator' => 'AND'
            )
        )
    )
);

上述查询将选择 category 分类下带有 guide slug 的帖子,或者在 category 下具有 tutorial slug 并具有 php, stringsphpcnendc 的帖子<code>post_tag 下的 phpcn slug 组合.

WP_Query 매개변수를 사용하여 분류 필터링

关于 tax 参数的注释

您可能想知道为什么我没有包含 {tax} 参数,您只需按如下方式编写您的参数:

$args = array(
    'taxonomy1' => 'slug-one'
);

如果您过去曾经使用过这种查询分类法的方式,您可能会熟悉这种方式,但它现在已被弃用,并且您不应该使用它。所以坚持使用 tax_query!无论如何,使用 tax_query 会给您带来更大的灵活性。

摘要

查询分类比类别和标签稍微复杂一些,因为您需要掌握 tax_query 参数。

但是,正如我们所看到的,这是一个非常有力的论点,它为您提供了很大的范围和灵活性,可以按照您希望的方式查询数据库。

这篇文章已根据 Nitish Kumar 的贡献进行了更新。 Nitish 是一名 Web 开发人员,拥有在各种平台上创建电子商务网站的经验。他将业余时间花在个人项目上,让他的日常生活变得更轻松,或者在晚上与朋友一起散步。

위 내용은 WP_Query 매개변수를 사용하여 분류 필터링의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.