WP_Query中多个Tax_Query的多个关系

时间:2013-04-18 作者:ron_dev

我想使用WP_Query() 类来筛选我的一些帖子。我现在面临的问题是处理分类查询。通常WP_Query() 仅处理一个关系tax_query() (或AND或or),但我需要的是在tax_query(), 如何实现
eg

\'tax_query\' => array(
        \'relation\' => \'AND\',
        array(
            \'taxonomy\' => \'taxonomy1\',
            \'field\' => \'slug\',
            \'terms\' => array( $term )
        ),
        array(
            \'taxonomy\' => \'taxonomy3\',
            \'field\' => \'slug\',
            \'terms\' => array( $term3 ),
            \'operator\' => \'IN\',
        )
       // below i want to use OR relationship
       \'relation\' => \'OR\',
      array(
            \'taxonomy\' => \'taxonomy4\',
            \'field\' => \'slug\',
            \'terms\' => array( $term4 )
        ),
        array(
            \'taxonomy\' => \'taxonomy2\',
            \'field\' => \'slug\',
            \'terms\' => array( $term2 ),
            \'operator\' => \'IN\',
        )
    )  
我知道上面的代码不起作用,我需要使用吗WP_Query() 要过滤吗?有什么想法吗?

2 个回复
SO网友:helenhousandi

这可以通过使用term\\u taxonomy\\u id而不是slug来完成,slug将有效地忽略指定的任何分类,只需查看唯一的term\\u taxonomy\\u id字段。这将使您能够有效地处理混合关系。您希望使用AND的整体关系,并使用in运算符将所有应该相关的术语或放在一个项目中。您需要首先将所需的术语映射到其term\\u taxonomy\\u ID。

$taxes = array( \'taxonomy1\', \'taxonomy2\', \'taxonomy3\', \'taxonomy4\' );

foreach ( $taxes as $tax ) {
    $terms = get_terms( $tax );

    foreach ( $terms as $term )
        $tax_map[$tax][$term->slug] = $term->term_taxonomy_id;
}


$args[\'tax_query\'] => array(
    \'relation\' => \'AND\',
    array(
        \'taxonomy\' => \'taxonomy1\',
        \'field\' => \'term_taxonomy_id\',
        \'terms\' => array( $tax_map[\'taxonomy1\'][$slug] )
        \'operator\' => \'IN\',
    ),
    array(
        \'taxonomy\' => \'taxonomy3\',
        \'field\' => \'term_taxonomy_id\',
        \'terms\' => array( $tax_map[\'taxonomy3\'][$slug] ),
        \'operator\' => \'IN\',
    ),
    array(
        \'taxonomy\' => \'taxonomy4\', // gets ignored
        \'field\' => \'term_taxonomy_id\',
        \'terms\' => array( $tax_map[\'taxonomy4\'][$slug], $tax_map[\'taxonomy2\'][$slug] ),
        \'operator\' => \'IN\',
    ),
);
请注意,在3.5之前,您还需要指定\'include_children\' => false. 有关更多信息,请参阅此Trac记录单:https://core.trac.wordpress.org/ticket/21228

SO网友:Maxime Culea

我建议使用tax_query 作为meta_query 对于多个或/和运算符,如this

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post