Filtrer les taxonomies à l'aide du paramètre WP_Query

王林
Libérer: 2023-09-01 15:50:01
original
1573 Les gens l'ont consulté

Jusqu'à présent dans cette série, vous avez appris WP_Query 的结构及其属性和方法。现在我们正在研究可与 WP_Query les différents paramètres utilisés ensemble et comment les encoder.

WP_Query 有大量可能的参数,这使得它极其灵活。由于您可以使用它来查询 wp_posts Tout ce qui est enregistré dans une table, il comporte donc des permutations de paramètres pour chaque requête que vous souhaitez exécuter sur le contenu.

Dans ce tutoriel, je découvrirai les paramètres d'interrogation des termes de classification.

  • Paramètres de classification
  • Requête d'un terme de classification
  • Requête de plusieurs termes dans une catégorie
  • Requête de termes dans plusieurs catégories
  • Requête de classification imbriquée

Examen du fonctionnement des paramètres dans PHPCNC PHPCN>WP_Query

Avant de commencer, examinons rapidement le fonctionnement des paramètres dans WP_Query<code class="inline">WP_Query 中的工作原理。当您在主题或插件中编写 WP_Query. Lorsque vous écrivez WP_Query

dans votre thème ou plugin, vous devez inclure quatre éléments principaux :
  • Paramètres de requête, utilisez les paramètres qui seront introduits dans ce tutoriel
  • La requête elle-même
  • Boucle
  • if 和 class="inline">whileFin : fermez les balises if
  • et
class="inline">while

et réinitialisez les données de publication

En pratique, cela ressemblera à ceci :

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

?>
Copier après la connexion

Ces paramètres indiquent à WordPress quelles données obtenir de la base de données, que je couvrirai ici. Nous nous concentrons donc ici sur la première partie du code :

$args = array(
    // Arguments for your query.
);
Copier après la connexion

Comme vous pouvez le voir, les paramètres sont contenus dans un tableau. En suivant ce tutoriel, vous apprendrez à les coder.

Écrivez vos paramètres

=>Les paramètres du tableau ont une méthode d'encodage spécifique, comme suit :

$args = array(
    'parameter1' => 'value',
    'parameter2' => 'value',
    'parameter3' => 'value'
);
Copier après la connexion

Vous devez placer les paramètres et leurs valeurs entre guillemets simples, utiliser =>

entre eux et les séparer par des virgules. Si vous faites cette erreur, WordPress risque de ne pas ajouter tous les paramètres à la requête, sinon vous risquez de voir un écran blanc.

tax_query Paramètres de classement

    Puisque vous utilisez tax_query<li>, définir les paramètres des termes de taxonomie est un peu plus compliqué que définir les paramètres des catégories et des balises. Dans ce paramètre, vous pouvez écrire un tableau imbriqué de paramètres pour spécifier des taxonomies et des termes en utilisant : <strong> <code class="inline">分类法 Taxonomie</strong> (</li>String<li>) : <strong>Taxonomie<code class="inline">field (string): 选择分类术语 ('term_id (默认), 'name''slug'
  • field<strong> (<code class="inline">termsstring) : Sélectionnez le terme de classification ('term_id</strong> (par défaut), <code class="inline" >'name'</li> ou <code class="inline">'slug'<li>)<strong> <code class="inline">include_children terms</em> (</strong>int/string/array</li>) : <li>Termes de catégorie<strong> <code class="inline">operator (string): 要测试的运算符。可能的值为 'IN' (默认)、'NOT IN''AND''EXISTS'、和 “不存在”
  • include_children</ul> (<p>boolean<code class="inline">operator 参数这一事实意味着您无需从一系列可用参数中进行选择来定义是包含还是排除术语(就像对标签所做的那样)和类别),但可以使用 tax_query) :

    S'il faut inclure les enfants des taxonomies hiérarchiques. La valeur par défaut est vrai.

    relation 参数,其中 AND OR

    operator<p> (</p>string<h3>) :</h3> L'opérateur à tester. Les valeurs possibles sont <code class="inline">'IN'<p> (par défaut), <code class="inline">'NOT IN'</p>, <code class="inline">'AND'<p>, <code > 'EXISTE'<img src="https://img.php.cn/upload/article/000/465/014/169355456062921.jpg" alt="Filtrer les taxonomies à laide du paramètre WP_Query" />, et <code>"n'existe pas"</p>. <p> <code class="inline">category 分类中包含 tutorial 术语的帖子。请注意,您还需要使用 field

    Le fait que vous disposiez du paramètre operator<p> signifie que vous n'avez pas à choisir parmi une gamme de paramètres disponibles pour définir s'il faut inclure ou exclure des termes (comme vous le faites pour les balises et les catégories) , Mais vous pouvez utiliser <code class="inline">tax_query<img src="https://img.php.cn/upload/article/000/465/014/169355456012868.jpg" alt="Filtrer les taxonomies à laide du paramètre WP_Query" /> pour remplacer tout le contenu lié à la classification. </p> <p>Si vous souhaitez interroger plusieurs taxonomies, vous pouvez également utiliser le paramètre <code class="inline">relation</p> avant tous les tableaux (un pour chaque taxonomie) où <code class="inline">AND <h3> ou < code class= "inline">OR</h3> Spécifie si vous souhaitez rechercher des publications contenant tous les termes ou l'un d'entre eux. <p> </p>Cela peut être facilement expliqué avec quelques exemples. 🎜 🎜 Interroger un terme de classification🎜 🎜Il s'agit du scénario le plus simple, impliquant simplement l'utilisation d'un tableau imbriqué : 🎜 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbal:false;">$args = array( 'tax_query' =&gt; array( array( 'taxonomy' =&gt; 'category', 'field' =&gt; 'slug', 'terms' =&gt; 'tutorial', ) ) ); </pre><div class="contentsignin">Copier après la connexion</div></div> 🎜🎜🎜 🎜La requête ci-dessus concerne les articles contenant le terme <code>tutorial🎜 dans la catégorie <code class="inline">category🎜. Notez que vous devez également utiliser le paramètre <code class="inline">field🎜 pour identifier le champ que vous utilisez pour identifier le terme, sauf si vous utilisez l'ID de terme par défaut. Si vous souhaitez utiliser le terme ID, vous pouvez utiliser quelque chose comme ceci : 🎜 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbal:false;">$args = array( 'tax_query' =&gt; array( array( 'taxonomy' =&gt; 'category', 'terms' =&gt; '11' ) ) ); </pre><div class="contentsignin">Copier après la connexion</div></div> 🎜🎜🎜 🎜L'utilisation d'un identifiant rendra plus difficile la détermination ultérieure de ce que recherche la requête, mais vous pouvez éviter tout problème potentiel si vous pensez que les utilisateurs pourraient modifier le terme slugs. 🎜 🎜 Interrogez plusieurs termes dans une catégorie🎜 🎜Si vous souhaitez identifier les publications contenant un ou plusieurs tableaux de termes dans la même catégorie, vous pouvez toujours écrire un tableau imbriqué mais ajouter un ensemble de termes. 🎜 <p>例如,要查询包含分类中<em>任何</em>术语 ID 列表的帖子,您可以使用:</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbal:false;">$args = array( 'tax_query' =&gt; array( array( 'taxonomy' =&gt; 'post_tag', 'terms' =&gt; [14, 17] ) ) ); </pre><div class="contentsignin">Copier après la connexion</div></div> <p><img src="https://img.php.cn/upload/article/000/465/014/169355456148575.jpg" alt="Filtrer les taxonomies à laide du paramètre WP_Query" /></p> <p>但是如果您想查询包含这些术语的<em>所有</em>帖子怎么办?您需要在嵌套数组中使用 <code class="inline">operator 参数:

    $args = array(
        'tax_query' => array(
            array(
                'taxonomy' => 'post_tag',
                'terms' => [14, 17],
                'operator' => 'AND'
            )
        )
    );
    
    Copier après la connexion

    Filtrer les taxonomies à laide du paramètre WP_Query

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

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

    $args = array(
        'tax_query' => array(
            array(
                'taxonomy' => 'post_tag',
                'terms' => [14, 17],
                'operator' => 'NOT IN'
            )
        )
    );
    
    Copier après la connexion

    Filtrer les taxonomies à laide du paramètre 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'
            )
        )
    );
    
    Copier après la connexion

    Filtrer les taxonomies à laide du paramètre WP_Query

    从多个分类中查询术语

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

    $args = array(
        'tax_query' => array(
            'relation' => 'AND',
            array(
                'taxonomy' => 'category',
                'field' => 'slug',
                'terms' => ['tutorial']
            ),
            array(
                'taxonomy' => 'post_tag',
                'field' => 'slug',
                'terms' => ['javascript']
            )
        )
    );
    
    Copier après la connexion

    Filtrer les taxonomies à laide du paramètre 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']
            )
        )
    );
    
    Copier après la connexion

    Filtrer les taxonomies à laide du paramètre 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']
            )
        )
    );
    
    Copier après la connexion

    Filtrer les taxonomies à laide du paramètre 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'
            )
        )
    );
    
    Copier après la connexion

    Filtrer les taxonomies à laide du paramètre 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'
                )
            )
        )
    );
    
    Copier après la connexion

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

    Filtrer les taxonomies à laide du paramètre WP_Query

    关于 tax 参数的注释

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

    $args = array(
        'taxonomy1' => 'slug-one'
    );
    
    Copier après la connexion

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

    摘要

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

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

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

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!