繁体   English   中英

WP查询:排除自定义分类法的所有术语

[英]WP Query: Exclude ALL terms of a custom taxonomy

在WordPress中,我有一个自定义帖子类型“ books”和两个自定义分类法“ genre”和“ series”。 尽管所有书籍都具有流派,但并非所有书籍都是丛书的一部分。 我现在希望能够查询所有非系列书名,即所有没有该系列分类法的书籍。 接下来,我访问了WordPress论坛,还搜索了一个解决方案,但只找到了如何排除自定义分类法的特定术语,而不是自定义分类法本身及其所属的所有术语的方法。

当然,我可以在税收查询中简单列出“系列”中的所有术语以将其排除在外,但是如果将来我为“系列”添加新术语,则必须记住要编辑查询,并且希望避免使用。 这就是为什么我提出了以下想法,但是它没有用:

<?php
$terms = get_terms( 'series', $args );
$count = count( $terms );
$i = 0;
foreach ( $terms as $term ) {
    $i++;
    $term_list .= "'" . $term->slug . "'";
    if ( $count != $i ) {
        $term_list .= ', ';
    }
    else {
        $term_list .= '';
    }
}
$args = array(
    'post_type' => 'books',
    'order' => 'ASC',
    'orderby' => 'date',
    'posts_per_page' => '-1',
    'tax_query'        => array(
    array(
        'taxonomy'  => 'series',
        'terms' => array($term_list),
        'field' => 'slug',
        'operator'  => 'NOT IN')
        ),
);
query_posts($args);?>

如您所见,我尝试首先查询所有“系列”字词,然后将其输出到必须包含在tax数组中的样式的列表中。 我当前得到的结果是查询运行时所有书籍都会出现。

有人可以告诉我我哪里出问题了吗? 或者,如果您有另一种方法来排除自定义分类法的所有术语,而无需在每次添加新术语时都手动调整代码,那么我很高兴。

您需要它是一个术语数组,现在您正在使用一个元素数组,该元素是用逗号分隔的术语列表。 尝试这个:

$terms = get_terms( 'series', $args );
$to_exclude = array();
foreach ( $terms as $term ) {
    $to_exclude[] = $term->slug;
}

$args = array(
    'post_type' => 'books',
    'order' => 'ASC',
    'orderby' => 'date',
    'posts_per_page' => '-1',
    'tax_query'        => array(
    array(
        'taxonomy'  => 'series',
        'terms' => $to_exclude,
        'field' => 'slug',
        'operator'  => 'NOT IN')
        ),
);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM