このシリーズではこれまで、WP_Query
の構造とそのプロパティとメソッドについて学習しました。ここでは、WP_Query
で使用できるさまざまなパラメータとそれらのエンコード方法を見ていきます。
WP_Query
には多数のパラメータを指定できるため、非常に柔軟です。これを使用して wp_posts
テーブルに保持されているコンテンツをクエリすることができるため、コンテンツに対して実行する可能性のあるクエリのすべての順列に対するパラメーターが含まれています。
このチュートリアルでは、分類用語をクエリするためのパラメーターについて学習します。
始める前に、WP_Query
でパラメーターがどのように機能するかを簡単に確認しましょう。テーマまたはプラグインで WP_Query
を記述するときは、次の 4 つの主要な要素を含める必要があります。
タグを閉じて、投稿データをリセットします
実際には、これは次のようになります: リーリー
ご覧のとおり、パラメータは配列に含まれています。このチュートリアルに従うにつれて、それらをコーディングする方法を学びます。パラメータを記述します
配列内のパラメータには、次のような特定のエンコード方法があります:
=>
を使用し、カンマで区切る必要があります。この間違いを犯すと、WordPress がクエリにすべてのパラメーターを追加しない可能性があり、追加しないと白い画面が表示されることがあります。
分類パラメータ
分類
field分類用語を選択します (
'term_id (デフォルト)、'name' または「ナメクジ」
)
用語分類用語
include_children階層分類の子を含めるかどうか。デフォルトは true です。
operator テストする演算子。可能な値は、
'IN' (デフォルト)、'NOT IN'、'AND'
、'EXISTS'
、および# ##"存在しない"###。
operator パラメータがあるということは、(ラベルやカテゴリの場合のように) 用語を含めるか除外するかを定義するために、利用可能なパラメータの範囲から選択する必要がないことを意味します。ただし、
tax_query 複数の分類法をクエリする場合は、すべての配列 (分類法ごとに 1 つ) の前に relation
パラメーターを使用することもできます。ここで、AND
または
を指定します。すべての用語を含む投稿を検索したい場合でも、いずれかの用語を含む投稿を検索したい場合でも。
これは、いくつかの例で簡単に説明できます。
分類用語をクエリする
これは、ネストされた配列の使用のみを含む最も単純なシナリオです:
category
カテゴリにtutorial という用語を含む投稿を対象としています。デフォルトの用語 ID を使用している場合を除き、
field パラメーターを使用して用語の識別に使用しているフィールドを識別する必要があることにも注意してください。 ID という用語を使用したい場合は、次のようなものを使用できます:
リーリー
ID を使用すると、後でクエリで何を探しているのかを判断するのが難しくなりますが、ユーザーがスラッグという用語を編集する可能性があると考えられる場合には、潜在的な問題を回避できます。
同じカテゴリ内の 1 つ以上の用語の配列を含む投稿を識別したい場合は、ネストされた配列を記述して用語のセットを追加することができます。
例如,要查询包含分类中任何术语 ID 列表的帖子,您可以使用:
$args = array( 'tax_query' => array( array( 'taxonomy' => 'post_tag', 'terms' => [14, 17] ) ) );
但是如果您想查询包含这些术语的所有帖子怎么办?您需要在嵌套数组中使用 operator
参数:
$args = array( 'tax_query' => array( array( 'taxonomy' => 'post_tag', 'terms' => [14, 17], 'operator' => 'AND' ) ) );
请注意,第一个示例实际上使用 IN
运算符来查找包含任何术语的帖子,但由于这是默认值,因此您不必在参数中指定它。 p>
另一种情况是,如果您想要查询在一个分类中没有任何术语数组的帖子,您可以这样做:
$args = array( 'tax_query' => array( array( 'taxonomy' => 'post_tag', 'terms' => [14, 17], 'operator' => 'NOT IN' ) ) );
在这里,我将 AND
运算符替换为 NOT IN
,这意味着 WordPress 将查找数组中不包含任何术语的帖子。
请注意,如果您更喜欢使用 slugs 而不是术语 ID,则可以在任何这些场景中执行此操作。最后一个示例如下所示:
$args = array( 'tax_query' => array( array( 'taxonomy' => 'post_tag', 'field' => 'slug', 'terms' => ['php', 'strings'], 'operator' => 'NOT IN' ) ) );
如果您想要使用多个分类法,则需要创建多个数组。让我们看一个最简单的示例,查询包含类别分类中的一个术语和标签分类中的一个术语的帖子:
$args = array( 'tax_query' => array( 'relation' => 'AND', array( 'taxonomy' => 'category', 'field' => 'slug', 'terms' => ['tutorial'] ), array( 'taxonomy' => 'post_tag', 'field' => 'slug', 'terms' => ['javascript'] ) ) );
在这里,我编写了两个嵌套数组:每个分类法一个,使用与仅使用一种分类法的示例相同的参数。我在这些之前添加了 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'] ) ) );
您还可以通过将给定分类法添加到数组中来查找多个术语:
$args = array( 'tax_query' => array( 'relation' => 'OR', array( 'taxonomy' => 'category', 'field' => 'slug', 'terms' => ['guide'] ), array( 'taxonomy' => 'post_tag', 'field' => 'slug', 'terms' => ['php', 'strings'] ) ) );
通过将 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' ) ) );
请注意,我在这里使用了 '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 组合.
tax
参数的注释您可能想知道为什么我没有包含 {tax}
参数,您只需按如下方式编写您的参数:
$args = array( 'taxonomy1' => 'slug-one' );
如果您过去曾经使用过这种查询分类法的方式,您可能会熟悉这种方式,但它现在已被弃用,并且您不应该使用它。所以坚持使用 tax_query
!无论如何,使用 tax_query
会给您带来更大的灵活性。
查询分类比类别和标签稍微复杂一些,因为您需要掌握 tax_query
参数。
但是,正如我们所看到的,这是一个非常有力的论点,它为您提供了很大的范围和灵活性,可以按照您希望的方式查询数据库。
这篇文章已根据 Nitish Kumar 的贡献进行了更新。 Nitish 是一名 Web 开发人员,拥有在各种平台上创建电子商务网站的经验。他将业余时间花在个人项目上,让他的日常生活变得更轻松,或者在晚上与朋友一起散步。
以上がWP_Query パラメータを使用してタクソノミーをフィルタリングするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。