Heim  >  Artikel  >  Backend-Entwicklung  >  Filtern Sie Taxonomien mit dem Parameter WP_Query

Filtern Sie Taxonomien mit dem Parameter WP_Query

王林
王林Original
2023-09-01 15:49:071575Durchsuche

Bisher haben Sie in dieser Serie gelernt WP_Query 的结构及其属性和方法。现在我们正在研究可与 WP_Query, welche verschiedenen Parameter zusammen verwendet werden und wie man sie kodiert.

WP_Query 有大量可能的参数,这使得它极其灵活。由于您可以使用它来查询 wp_posts Alles wird in einer Tabelle gespeichert, sodass es Permutationen von Parametern für jede Abfrage gibt, die Sie möglicherweise für den Inhalt ausführen möchten.

In diesem Tutorial lerne ich die Parameter zum Abfragen von Klassifizierungsbegriffen kennen.

  • Klassifizierungsparameter
  • Fragen Sie einen Klassifizierungsbegriff ab
  • Mehrere Begriffe in einer Kategorie abfragen
  • Fragen Sie Begriffe aus mehreren Kategorien ab
  • Verschachtelte Klassifizierungsabfrage

Überprüfung der Funktionsweise von Parametern in phpcnc phpcn>WP_Query

Bevor wir beginnen, werfen wir einen kurzen Blick auf die Funktionsweise von Parametern in WP_Query<code class="inline">WP_Query 中的工作原理。当您在主题或插件中编写 WP_Query. Wenn Sie WP_Query

in Ihr Theme oder Plugin schreiben, müssen Sie vier Hauptelemente einschließen:
  • Abfrageparameter: Verwenden Sie die Parameter, die in diesem Tutorial vorgestellt werden
  • Die Abfrage selbst
  • Schleife
  • if 和 class="inline">whileEnde: if
  • und
class="inline">while

-Tags schließen und Beitragsdaten zurücksetzen

In der Praxis wird das etwa so aussehen:

<?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();

?>

Diese Parameter teilen WordPress mit, welche Daten aus der Datenbank abgerufen werden sollen, worauf ich hier eingehen werde. Wir konzentrieren uns hier also auf den ersten Teil des Codes:

$args = array(
    // Arguments for your query.
);

Wie Sie sehen können, sind die Parameter in einem Array enthalten. Wenn Sie diesem Tutorial folgen, erfahren Sie, wie Sie sie codieren.

Schreiben Sie Ihre Parameter

=>Die Parameter im Array haben eine bestimmte Codierungsmethode wie folgt:

$args = array(
    'parameter1' => 'value',
    'parameter2' => 'value',
    'parameter3' => 'value'
);

Sie müssen Parameter und ihre Werte in einfache Anführungszeichen setzen, zwischen ihnen =>

verwenden und sie durch Kommas trennen. Wenn Sie diesen Fehler machen, fügt WordPress der Abfrage möglicherweise nicht alle Parameter hinzu, andernfalls wird möglicherweise ein weißer Bildschirm angezeigt.

tax_query Klassifizierungsparameter

    Da Sie tax_query<li> verwenden, ist das Festlegen von Parametern für Taxonomiebegriffe etwas komplizierter als das Festlegen von Parametern für Kategorien und Tags. In diesen Parameter können Sie ein verschachteltes Array von Parametern schreiben, um Taxonomien und Begriffe anzugeben, indem Sie Folgendes verwenden: <strong> <code class="inline">分类法 Taxonomie (String
  • ): Taxonomiefield (string): 选择分类术语 ('term_id (默认), 'name''slug'
  • field<strong> (<code class="inline">termsstring): Klassifizierungsbegriff auswählen ('term_id (Standard), 'name'
  • oder 'slug'<li>)<strong> <code class="inline">include_children terms (int/string/array):
  • Kategoriebegriffe operator (string): 要测试的运算符。可能的值为 'IN' (默认)、'NOT IN''AND''EXISTS'、和 “不存在”
  • include_children
(

booleanoperator 参数这一事实意味着您无需从一系列可用参数中进行选择来定义是包含还是排除术语(就像对标签所做的那样)和类别),但可以使用 tax_query):

Ob untergeordnete Elemente hierarchischer Taxonomien einbezogen werden sollen. Der Standardwert ist „true“.

relation 参数,其中 AND OR

operator<p> (</p>string<h3>):</h3> Der zu testende Operator. Mögliche Werte sind <code class="inline">'IN'<p> (Standard), <code class="inline">'NOT IN'

, 'AND'<p>, <code> 'EXISTS'<img src="https://img.php.cn/upload/article/000/465/014/169355456062921.jpg" alt="Filtern Sie Taxonomien mit dem Parameter WP_Query"> und <code>"existiert nicht"

.

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

Die Tatsache, dass Sie über den Parameter operator<p> verfügen, bedeutet, dass Sie nicht aus einer Reihe verfügbarer Parameter auswählen müssen, um zu definieren, ob Begriffe ein- oder ausgeschlossen werden sollen (wie dies bei Tags und Kategorien der Fall ist). , Sie können jedoch <code class="inline">tax_query<img src="https://img.php.cn/upload/article/000/465/014/169355456012868.jpg" alt="Filtern Sie Taxonomien mit dem Parameter WP_Query"> verwenden, um alle klassifizierungsbezogenen Inhalte zu ersetzen.

Wenn Sie mehrere Taxonomien abfragen möchten, können Sie auch den Parameter relation

vor allen Arrays (eines für jede Taxonomie) verwenden, wobei AND <h3> oder OR</h3> Gibt an, ob Sie Beiträge finden möchten, die alle Begriffe oder einen davon enthalten. <p> </p>Das lässt sich anhand einiger Beispiele leicht erklären. 🎜 🎜 Fragen Sie einen Klassifizierungsbegriff ab🎜 🎜Dies ist das einfachste Szenario, bei dem lediglich ein verschachteltes Array verwendet wird: 🎜 <pre class="brush:php;toolbal:false;">$args = array( 'tax_query' =&gt; array( array( 'taxonomy' =&gt; 'category', 'field' =&gt; 'slug', 'terms' =&gt; 'tutorial', ) ) ); </pre> 🎜🎜🎜 🎜Die obige Abfrage gilt für Beiträge, die den Begriff <code>tutorial🎜 in der Kategorie <code class="inline">category🎜 enthalten. Beachten Sie, dass Sie auch den Parameter <code class="inline">field🎜 verwenden müssen, um anzugeben, welches Feld Sie zur Identifizierung des Begriffs verwenden, es sei denn, Sie verwenden die Standardbegriffs-ID. Wenn Sie den Begriff ID verwenden möchten, können Sie etwa Folgendes verwenden: 🎜 <pre class="brush:php;toolbal:false;">$args = array( 'tax_query' =&gt; array( array( 'taxonomy' =&gt; 'category', 'terms' =&gt; '11' ) ) ); </pre> 🎜🎜🎜 🎜Die Verwendung einer ID macht es später schwieriger zu bestimmen, wonach die Abfrage sucht, aber es vermeidet potenzielle Probleme, wenn Sie glauben, dass Benutzer die Begriffs-Slugs bearbeiten könnten. 🎜 🎜 Fragen Sie mehrere Begriffe in einer Kategorie ab🎜 🎜Wenn Sie Beiträge mit einem oder mehreren Arrays von Begriffen in derselben Kategorie identifizieren möchten, können Sie immer noch ein verschachteltes Array schreiben, aber einen Satz von Begriffen hinzufügen. 🎜 <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="Filtern Sie Taxonomien mit dem Parameter WP_Query"></p> <p>但是如果您想查询包含这些术语的<em>所有</em>帖子怎么办?您需要在嵌套数组中使用 <code class="inline">operator 参数:

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

Filtern Sie Taxonomien mit dem Parameter WP_Query

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

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

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

Filtern Sie Taxonomien mit dem Parameter 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'
        )
    )
);

Filtern Sie Taxonomien mit dem Parameter WP_Query

从多个分类中查询术语

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

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

Filtern Sie Taxonomien mit dem Parameter 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']
        )
    )
);

Filtern Sie Taxonomien mit dem Parameter 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']
        )
    )
);

Filtern Sie Taxonomien mit dem Parameter 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'
        )
    )
);

Filtern Sie Taxonomien mit dem Parameter 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 组合.

Filtern Sie Taxonomien mit dem Parameter WP_Query

关于 tax 参数的注释

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

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

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

摘要

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

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

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

Das obige ist der detaillierte Inhalt vonFiltern Sie Taxonomien mit dem Parameter WP_Query. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn