ホームページ > バックエンド開発 > PHPチュートリアル > WP_Query パラメータを使用してタクソノミーをフィルタリングする

WP_Query パラメータを使用してタクソノミーをフィルタリングする

王林
リリース: 2023-09-01 15:50:01
オリジナル
1615 人が閲覧しました

このシリーズではこれまで、WP_Query の構造とそのプロパティとメソッドについて学習しました。ここでは、WP_Query で使用できるさまざまなパラメータとそれらのエンコード方法を見ていきます。

WP_Query には多数のパラメータを指定できるため、非常に柔軟です。これを使用して wp_posts テーブルに保持されているコンテンツをクエリすることができるため、コンテンツに対して実行する可能性のあるクエリのすべての順列に対するパラメーターが含まれています。

このチュートリアルでは、分類用語をクエリするためのパラメーターについて学習します。

  • 分類パラメータ
  • 分類用語をクエリする
  • カテゴリ内の複数の用語をクエリする
  • 複数のカテゴリからのクエリ用語
  • ネストされた分類クエリ

phpcnc でのパラメータの動作の確認 phpcn>WP_Query

始める前に、WP_Query でパラメーターがどのように機能するかを簡単に確認しましょう。テーマまたはプラグインで WP_Query を記述するときは、次の 4 つの主要な要素を含める必要があります。

    クエリ パラメーター。このチュートリアルで紹介するパラメーターを使用します。
  • クエリ自体
  • ###サイクル###
  • 終了:
  • if
  • class="inline">while タグを閉じて、投稿データをリセットします 実際には、これは次のようになります:
  • リーリー
これらのパラメータは、データベースからどのデータを取得するかを WordPress に指示します。これについては、ここで説明します。ここで注目するのは、コードの最初の部分です:

リーリー

ご覧のとおり、パラメータは配列に含まれています。このチュートリアルに従うにつれて、それらをコーディングする方法を学びます。

パラメータを記述します

配列内のパラメータには、次のような特定のエンコード方法があります:

リーリー

パラメータとその値は一重引用符で囲み、それらの間に

=>

を使用し、カンマで区切る必要があります。この間違いを犯すと、WordPress がクエリにすべてのパラメーターを追加しない可能性があり、追加しないと白い画面が表示されることがあります。

分類パラメータ

tax_query

を使用しているため、分類用語のパラメータの設定は、カテゴリやタグのパラメータの設定よりも少し複雑です。このパラメータでは、次のようにパラメータのネストされた配列を記述して、分類法と用語を指定できます。

分類
    (
  • 文字列): 分類 field
  • (
  • string): 分類用語を選択します ('term_id (デフォルト)、'name' または「ナメクジ」) 用語
  • (
  • int/string/array):分類用語 include_children
  • (
  • ブール値): 階層分類の子を含めるかどうか。デフォルトは true です。 operator
  • (
  • string): テストする演算子。可能な値は、'IN' (デフォルト)、'NOT IN''AND''EXISTS'、および# ##"存在しない"###。 operator パラメータがあるということは、(ラベルやカテゴリの場合のように) 用語を含めるか除外するかを定義するために、利用可能なパラメータの範囲から選択する必要がないことを意味します。ただし、tax_query
  • は、すべての分類関連コンテンツの代わりに使用できます。

複数の分類法をクエリする場合は、すべての配列 (分類法ごとに 1 つ) の前に relation パラメーターを使用することもできます。ここで、AND または

OR

を指定します。すべての用語を含む投稿を検索したい場合でも、いずれかの用語を含む投稿を検索したい場合でも。 これは、いくつかの例で簡単に説明できます。 分類用語をクエリする これは、ネストされた配列の使用のみを含む最も単純なシナリオです:

リーリー

上記のクエリは、

category

カテゴリに

tutorialWP_Query パラメータを使用してタクソノミーをフィルタリングする という用語を含む投稿を対象としています。デフォルトの用語 ID を使用している場合を除き、

field

パラメーターを使用して用語の識別に使用しているフィールドを識別する必要があることにも注意してください。 ID という用語を使用したい場合は、次のようなものを使用できます: リーリー ID を使用すると、後でクエリで何を探しているのかを判断するのが難しくなりますが、ユーザーがスラッグという用語を編集する可能性があると考えられる場合には、潜在的な問題を回避できます。

カテゴリ内の複数の用語をクエリする

WP_Query パラメータを使用してタクソノミーをフィルタリングする 同じカテゴリ内の 1 つ以上の用語の配列を含む投稿を識別したい場合は、ネストされた配列を記述して用語のセットを追加することができます。

例如,要查询包含分类中任何术语 ID 列表的帖子,您可以使用:

$args = array(
    'tax_query' => array(
        array(
            'taxonomy' => 'post_tag',
            'terms' => [14, 17]
        )
    )
);
ログイン後にコピー

WP_Query パラメータを使用してタクソノミーをフィルタリングする

但是如果您想查询包含这些术语的所有帖子怎么办?您需要在嵌套数组中使用 operator 参数:

$args = array(
    'tax_query' => array(
        array(
            'taxonomy' => 'post_tag',
            'terms' => [14, 17],
            'operator' => 'AND'
        )
    )
);
ログイン後にコピー

WP_Query パラメータを使用してタクソノミーをフィルタリングする

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

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

$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,这就是我正在寻找的。

您可以根据需要进一步查询分类法的术语:在两个嵌套查询中使用 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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート