WP_Query参数:分类法

到目前为止,您已经了解了WP_Query的结构以及其属性和方法。 现在,我们正在研究可与WP_Query使用的各种参数,以及如何对它们进行编码。

WP_Query具有大量可能的参数,这使其非常灵活。 由于您可以使用它查询几乎所有wp_posts表中保存的wp_posts ,因此它为您可能希望在内容上运行的每个查询排列提供参数。

在本教程中,我将研究用于查询分类术语的参数。

WP_Query中的参数工作原理回顾

在开始之前,让我们快速回顾一下WP_Query参数如何工作。 在主题或插件中编码WP_Query时,需要包括四个主要元素:

  • 查询参数,使用本教程将介绍的参数
  • 查询本身
  • 循环
  • 完成:关闭ifwhile标签并重置发布数据

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

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

?>

参数是什么告诉WordPress从数据库中获取什么数据,这就是我将在这里介绍的数据。 因此,我们在这里只关注代码的第一部分:

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

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

编写您的论点

有一种特定的方式可以对数组中的参数进行编码,如下所示:

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

您必须将参数及其值用单引号引起来,并在它们之间使用=> ,并用逗号分隔。 如果您弄错了,WordPress可能不会将所有参数添加到查询中,或者会出现白屏。

分类参数

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

  • taxonomy字符串 ):分类法。
  • field字符串 ):通过( 'term_id (默认), 'name''slug' )选择分类术语。
  • termsint / string / array ):分类术语。
  • include_childrenboolean ):是否将孩子包括在分级分类法中。 默认为true。
  • operatorstring ):要测试的运算符。 可能的值为'IN' (默认), 'NOT IN''AND'

拥有operator参数的事实意味着您无需从一系列可用参数中进行选择来定义是否要包含或排除术语(就像对标记和类别所做的那样),而是对所有分类法使用tax_query相关。

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

用一些示例最容易解释。

查询一个分类术语

这是最简单的方案,只涉及使用一个嵌套数组:

$args = array(
    'tax_query' => array(
        array(
            'taxonomy' => 'my-taxonomy',
            'field' => 'slug',
            'terms' => 'my-term-slug',
        )
    )
);

上面的查询用于在my-taxonomy法分类中使用“ my-term-slug帖子。 请注意,除非您使用默认的术语ID,否则还需要使用field参数来识别用于标识术语的字段。 如果您想使用术语ID,则可以使用以下代码:

$args = array(
    'tax_query' => array(
        array(
            'taxonomy' => 'my-taxonomy',
            'terms' => '11'
        )
    )
);

使用ID使您日后很难确定查询的内容,但是如果您认为用户可以编辑词条,则可以避免任何潜在的问题。

在一种分类法中查询多个术语

如果要使用同一分类法中的一个或多个术语数组来标识帖子,则仍可以编写一个嵌套数组,但添加一个术语数组。

例如,要使用分类中的任何术语ID列表查询帖子,请使用:

$args = array(
    'tax_query' => array(
        array(
            'taxonomy' => 'my-taxonomy',
            'terms' => array(
                '11',
                '12'
            )
        )
    )
);

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

$args = array(
    'tax_query' => array(
        array(
            'taxonomy' => 'my-taxonomy',
            'terms' => array(
                '11',
                '12'
            ),
            'operator' => 'AND'
        )
    )
);

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

另一种情况是,如果您要查询一种分类法中没有一系列术语的帖子,您可以这样做:

$args = array(
    'tax_query' => array(
        array(
            'taxonomy' => 'my-taxonomy',
            'terms' => array(
                '11',
                '12'
            ),
            'operator' => 'NOT IN'
        )
    )
);

在这里,我用NOT IN代替了AND运算符,这意味着WordPress将查找没有数组中任何术语的帖子。

请注意,如果您更喜欢使用条形符号而不是术语ID,则可以在任何这些情况下使用。 最后一个示例如下所示:

$args = array(
    'tax_query' => array(
        array(
            'taxonomy' => 'my-taxonomy',
            'field' => 'slug',
            'terms' => array(
                'my-slug',
                'your-slug'
            ),
            'operator' => 'NOT IN'
        )
    )
);

另一种情况是,如果您要查询具有一个术语但没有另一个术语的帖子。 这将使用IN运算符(您不需要将其包括在内,因为它是默认值),在要排除的任何术语的ID之前带有减号:

$args = array(
    'tax_query' => array(
        array(
            'taxonomy' => 'my-taxonomy',
            'terms' => array(
                '11',
                '-12'
            )
        )
    )
);

这查询的是第11期而不是第12期的帖子。

从多个分类法中查询术语

如果要使用多个分类法,则需要创建多个数组。 让我们看一个最简单的示例,查询一个带有来自taxonomy1的术语一个来自taxonomy2的术语的帖子:

$args = array(
    'tax_query' => array(
        'relation' => 'AND',
        array(
            'taxonomy' => 'taxonomy1',
            'field' => 'slug',
            'terms' => array( 'slug-one' )
        ),
        array(
            'taxonomy' => 'taxonomy2',
            'field' => 'slug',
            'terms' => array( 'slug-two' )
        )
    )
);

在这里,我编写了两个嵌套数组:每个分类法一个,使用与仅使用一个分类法的示例相同的参数。 在这些之前,我先提到了relation参数。 您需要包含relation参数,以告诉WordPress是要查找每个数组输出的全部还是部分帖子。 其工作原理如下:

  • 如果您使用'relation' => 'AND' ,则WordPress将获取第一个数组第二个数组中指定的帖子。 因此在上面的例子中,只有同时与职位slug-one在塞taxonomy1slug-two塞在taxonomy2将被查询。
  • 如果您使用'relation' => 'OR' ,则WordPress将获取第一个数组第二个数组输出的帖子。 因此,在这种情况下,您将获得带有 slug-one子弹或“ slug-two子弹(或两者)的帖子。

如果要查找带有两个子弹之一的帖子,这是您将使用的代码:

$args = array(
    'tax_query' => array(
        'relation' => 'OR',
        array(
            'taxonomy' => 'taxonomy1',
            'field' => 'slug',
            'terms' => array( 'slug-one' )
        ),
        array(
            'taxonomy' => 'taxonomy2',
            'field' => 'slug',
            'terms' => array( 'slug-two' )
        )
    )
);

您还可以通过将给定分类法添加到数组中来查找多个术语:

$args = array(
    'tax_query' => array(
        'relation' => 'OR',
        array(
            'taxonomy' => 'taxonomy1',
            'field' => 'slug',
            'terms' => array( 'slug-one' )
        ),
        array(
            'taxonomy' => 'taxonomy2',
            'field' => 'slug',
            'terms' => array(
                'slug-two',
                'slug-three'
            )
        )
    )
);

通过还使用operatorrelation参数与嵌套查询结合使用,可以创建非常复杂的查询。 下面的参数将查询具有一个分类法中的术语但不具有来自另一分类学中的术语的帖子:

$args = array(
    'tax_query' => array(
        'relation' => 'AND',
        array(
            'taxonomy' => 'taxonomy1',
            'field' => 'slug',
            'terms' => array( 'slug-one' ),
            'operator' => 'NOT IN'
        ),
        array(
            'taxonomy' => 'taxonomy2',
            'field' => 'slug',
            'terms' => array( 'slug-two' )
        )
    )
);

请注意,我在这里使用了'relation' => 'AND' :如果使用OR ,它将查询带有“ slug-two 没有“ slug-one帖子,而不是具有“ slug-two但没有“ slug-one帖子,这就是我想要的。

可以想象,您可以根据需要进一步查询分类法的术语:在两个嵌套查询中都使用operator参数,或者在另一个分类法中添加附加的嵌套查询来查询术语。

关于税收论点的注释

您可能想知道为什么我没有包含{tax}参数,您只需在其中编写如下参数即可:

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

如果您过去曾经做过查询分类法的方法,那么您可能已经很熟悉了,但是现在已经过时了,您不应该使用它。 因此,坚持使用'tax_query' ! 无论如何,使用tax_query给您带来更大的灵活性。

摘要

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

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

翻译自: https://code.tutsplus.com/tutorials/wp_query-arguments-taxonomies--cms-23090

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值