Rumah > pembangunan bahagian belakang > tutorial php > Tapis taksonomi menggunakan parameter WP_Query

Tapis taksonomi menggunakan parameter WP_Query

王林
Lepaskan: 2023-09-01 15:50:01
asal
1615 orang telah melayarinya

Setakat ini dalam siri ini, anda telah mempelajari tentang struktur WP_Query dan sifat serta kaedahnya. Sekarang kita sedang melihat pelbagai parameter yang boleh digunakan dengan WP_Query dan cara mengekodnya. WP_Query 的结构及其属性和方法。现在我们正在研究可与 WP_Query 一起使用的各种参数以及如何对它们进行编码。

WP_Query 有大量可能的参数,这使得它极其灵活。由于您可以使用它来查询 wp_posts 表中保存的任何内容,因此它具有您可能想要在内容上运行的每个查询排列的参数。

在本教程中,我将了解查询分类术语的参数。

  • 分类参数
  • 查询一个分类术语
  • 查询一个分类中的多个术语
  • 从多个分类中查询术语
  • 嵌套分类查询

回顾 phpcnc 中的参数如何工作phpcn>WP_Query

在开始之前,让我们快速回顾一下参数在 WP_Query 中的工作原理。当您在主题或插件中编写 WP_Query 时,您需要包含四个主要元素:

  • 查询的参数,使用本教程将介绍的参数
  • 查询本身
  • 循环
  • 结束:关闭 if 和 class="inline">while 标签并重置帖子数据

实际上,这将类似于以下内容:

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

?>
Salin selepas log masuk

这些参数告诉 WordPress 从数据库中获取哪些数据,我将在这里介绍这些数据。所以我们在这里关注的是代码的第一部分:

$args = array(
    // Arguments for your query.
);
Salin selepas log masuk

如您所见,参数包含在一个数组中。在学习本教程时,您将学习如何对它们进行编码。

编写你的参数

数组中的参数有一种具体的编码方式,如下:

$args = array(
    'parameter1' => 'value',
    'parameter2' => 'value',
    'parameter3' => 'value'
);
Salin selepas log masuk

必须将参数及其值括在单引号中,在它们之间使用 =>,并用逗号分隔它们。如果您犯了这个错误,WordPress 可能不会将所有参数添加到查询中,否则您可能会看到白屏。

分类参数

由于您使用 tax_query,因此为分类术语设置参数比为类别和标签设置参数要复杂一些。在此参数中,您可以编写一个嵌套的参数数组,以使用这些参数指定分类法和术语:

  • 分类法字符串):分类法
  • field (string): 选择分类术语 ('term_id (默认), 'name''slug')
  • terms (int/string/array):分类术语
  • include_children布尔值):是否包含分层分类法的子级。默认为 true。
  • operator (string): 要测试的运算符。可能的值为 'IN' (默认)、'NOT IN''AND''EXISTS'、和 “不存在”

您拥有 operator 参数这一事实意味着您无需从一系列可用参数中进行选择来定义是包含还是排除术语(就像对标签所做的那样)和类别),但可以使用 tax_query 来代替所有与分类相关的内容。

如果您想查询多个分类法,您还可以在所有数组(每个分类法一个)之前使用 relation 参数,其中 AND OR 指定您是要查找包含所有术语还是其中任何术语的帖子。

通过一些例子可以很容易地解释这一点。

查询一个分类术语

这是最简单的场景,仅涉及使用一个嵌套数组:

$args = array(
    'tax_query' => array(
        array(
            'taxonomy' => 'category',
            'field' => 'slug',
            'terms' => 'tutorial',
        )
    )
);
Salin selepas log masuk

Tapis taksonomi menggunakan parameter WP_Query

上述查询是针对 category 分类中包含 tutorial 术语的帖子。请注意,您还需要使用 field

WP_Query mempunyai sejumlah besar kemungkinan parameter, yang menjadikannya sangat fleksibel. Memandangkan anda boleh menggunakannya untuk menanyakan sebarang kandungan yang disimpan dalam jadual wp_posts, ia mempunyai parameter untuk setiap pilih atur pertanyaan yang anda mungkin mahu jalankan pada kandungan tersebut.

Tapis taksonomi menggunakan parameter WP_QueryDalam tutorial ini, saya akan mempelajari tentang parameter untuk menanyakan istilah pengelasan.

  • Parameter klasifikasi
  • Soal istilah klasifikasi
  • Pertanyakan berbilang istilah dalam kategori
  • Istilah carian daripada berbilang kategori
  • Pertanyaan klasifikasi bersarang

Semak cara parameter berfungsi dalam phpcnc phpcn>WP_Query

Sebelum kita bermula, mari semak dengan pantas cara parameter berfungsi dalam WP_Query. Apabila anda menulis WP_Query dalam tema atau pemalam anda, anda perlu memasukkan empat elemen utama:

  • Parameter pertanyaan, gunakan parameter yang akan diperkenalkan dalam tutorial ini
  • Pertanyaan itu sendiri
  • Gelung
  • Tamat: Tutup teg if dan class="inline">while dan tetapkan semula data siaran

Dalam amalan, ini akan kelihatan seperti berikut:

$args = array(
    'tax_query' => array(
        array(
            'taxonomy' => 'category',
            'terms' => '11'
        )
    )
);
Salin selepas log masuk

Parameter ini memberitahu WordPress data apa yang perlu diperoleh daripada pangkalan data, yang akan saya bincangkan di sini. Jadi perkara yang kami fokuskan di sini ialah bahagian pertama kod:

$args = array(
    'tax_query' => array(
        array(
            'taxonomy' => 'post_tag',
            'terms' => [14, 17]
        )
    )
);
Salin selepas log masuk
Salin selepas log masuk
🎜Seperti yang anda lihat, parameter terkandung dalam tatasusunan. Semasa anda mengikuti tutorial ini, anda akan belajar cara mengekodnya. 🎜 🎜 Tulis parameter anda 🎜 🎜Parameter dalam tatasusunan mempunyai kaedah pengekodan khusus, seperti berikut: 🎜
$args = array(
    'tax_query' => array(
        array(
            'taxonomy' => 'post_tag',
            'terms' => [14, 17],
            'operator' => 'AND'
        )
    )
);
Salin selepas log masuk
Salin selepas log masuk
🎜Anda mesti menyertakan parameter dan nilainya dalam petikan tunggal, gunakan => di antaranya dan pisahkan dengan koma. Jika anda membuat kesilapan ini, WordPress mungkin tidak menambah semua parameter pada pertanyaan, jika tidak, anda mungkin melihat skrin putih. 🎜

Parameter pengelasan

🎜Memandangkan anda menggunakan tax_query, menetapkan parameter untuk istilah taksonomi adalah lebih rumit sedikit daripada menetapkan parameter untuk kategori dan teg. Dalam parameter ini anda boleh menulis tatasusunan bersarang parameter untuk menentukan taksonomi dan istilah menggunakan: 🎜
  • Taksonomi (String): Taksonomi
  • field (string): Pilih istilah pengelasan ('term_id ( Lalai), 'name' atau 'slug')
  • istilah (int/string/array):Syarat klasifikasi
  • include_children (boolean): Sama ada hendak memasukkan anak taksonomi hierarki. Lalai kepada benar.
  • operator (rentetan): Operator untuk menguji. Nilai yang mungkin adalah 'IN' (default), 'NOT IN', ' DAN ', 'WUJUD' dan "tidak wujud".
🎜Hakikat bahawa anda mempunyai parameter operator bermakna anda tidak perlu memilih daripada julat parameter yang tersedia untuk menentukan sama ada untuk memasukkan atau mengecualikan istilah (seperti yang anda lakukan untuk teg ) dan kategori), tetapi tax_query boleh digunakan sebaliknya untuk semua kandungan berkaitan taksonomi. 🎜 🎜Jika anda ingin menanyakan berbilang taksonomi, anda juga boleh menggunakan parameter relation sebelum semua tatasusunan (satu untuk setiap taksonomi) di mana DAN </code > atau <code class="inline">OR Menentukan sama ada anda ingin mencari siaran yang mengandungi semua istilah atau mana-mana daripadanya. 🎜 🎜Ini boleh dijelaskan dengan mudah dengan beberapa contoh. 🎜 🎜 Tanya istilah klasifikasi🎜 🎜Ini ialah senario paling mudah, melibatkan hanya menggunakan tatasusunan bersarang: 🎜
$args = array(
    'tax_query' => array(
        array(
            'taxonomy' => 'post_tag',
            'terms' => [14, 17],
            'operator' => 'NOT IN'
        )
    )
);
Salin selepas log masuk
Salin selepas log masuk
🎜Gunakan parameter WP_Query untuk menapis taksonomi🎜 🎜Pertanyaan di atas adalah untuk siaran yang mengandungi istilah tutorial dalam kategori kategori. Ambil perhatian bahawa anda juga perlu menggunakan parameter field untuk mengenal pasti medan yang anda gunakan untuk mengenal pasti istilah, melainkan anda menggunakan ID istilah lalai. Jika anda ingin menggunakan istilah ID anda boleh menggunakan sesuatu seperti ini: 🎜
$args = array(
    'tax_query' => array(
        array(
            'taxonomy' => 'post_tag',
            'field' => 'slug',
            'terms' => ['php', 'strings'],
            'operator' => 'NOT IN'
        )
    )
);
Salin selepas log masuk
Salin selepas log masuk
🎜🎜🎜 🎜Menggunakan ID akan menyukarkan untuk menentukan perkara yang dicari oleh pertanyaan itu kemudian, tetapi anda boleh mengelakkan sebarang masalah yang mungkin berlaku jika anda fikir pengguna mungkin mengedit istilah slug. 🎜 🎜 Tanya berbilang istilah dalam kategori🎜 🎜Jika anda ingin mengenal pasti siaran dengan satu atau lebih tatasusunan istilah dalam kategori yang sama, anda masih boleh menulis tatasusunan bersarang tetapi menambah satu set istilah. 🎜

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

$args = array(
    'tax_query' => array(
        array(
            'taxonomy' => 'post_tag',
            'terms' => [14, 17]
        )
    )
);
Salin selepas log masuk
Salin selepas log masuk

Tapis taksonomi menggunakan parameter WP_Query

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

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

Tapis taksonomi menggunakan parameter WP_Query

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

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

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

Tapis taksonomi menggunakan 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'
        )
    )
);
Salin selepas log masuk
Salin selepas log masuk

Tapis taksonomi menggunakan 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']
        )
    )
);
Salin selepas log masuk

Tapis taksonomi menggunakan 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']
        )
    )
);
Salin selepas log masuk

Tapis taksonomi menggunakan 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']
        )
    )
);
Salin selepas log masuk

Tapis taksonomi menggunakan 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'
        )
    )
);
Salin selepas log masuk

Tapis taksonomi menggunakan parameter 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'
            )
        )
    )
);
Salin selepas log masuk

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

Tapis taksonomi menggunakan parameter WP_Query

关于 tax 参数的注释

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

$args = array(
    'taxonomy1' => 'slug-one'
);
Salin selepas log masuk

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

摘要

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

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

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

Atas ialah kandungan terperinci Tapis taksonomi menggunakan parameter WP_Query. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan