WP 查询:排除自定义分类法的所有术语
WP Query: Exclude ALL terms of a custom taxonomy
在 WordPress 中,我有一个自定义 post 类型 'books' 和两个自定义分类法 'genre' 和 'series'。虽然所有的书都有一个流派,但并不是所有的书都属于一个系列。我现在希望能够查询所有非系列图书,即所有书籍 w/o 系列分类法。接下来我访问了 WordPress 论坛并在谷歌上搜索了一个解决方案,但只找到了如何排除自定义分类法的特定术语,而不是自定义分类法本身和属于它的所有术语。
当然,我可以简单地在我的税务查询中列出来自 'series' 的所有条款以排除它们,但如果我将来为 'series' 添加新条款,我必须记得编辑我的查询,我想避免它。这就是为什么我想出了以下想法但它不起作用:
<?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);?>
如您所见,我尝试首先查询 'series' 的所有条款,然后将它们输出到一个列表中,其样式必须进入 tax 数组。我目前得到的结果是查询运行时所有的书都出现了。
谁能告诉我哪里错了?或者,如果您有另一种方法来排除自定义分类法的所有术语 w/o 每次添加新术语时手动调整代码,我洗耳恭听。
您需要它是一组术语,现在您使用的是单元素数组,其中元素是逗号分隔的术语列表。试试这个:
$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')
),
);
在 WordPress 中,我有一个自定义 post 类型 'books' 和两个自定义分类法 'genre' 和 'series'。虽然所有的书都有一个流派,但并不是所有的书都属于一个系列。我现在希望能够查询所有非系列图书,即所有书籍 w/o 系列分类法。接下来我访问了 WordPress 论坛并在谷歌上搜索了一个解决方案,但只找到了如何排除自定义分类法的特定术语,而不是自定义分类法本身和属于它的所有术语。
当然,我可以简单地在我的税务查询中列出来自 'series' 的所有条款以排除它们,但如果我将来为 'series' 添加新条款,我必须记得编辑我的查询,我想避免它。这就是为什么我想出了以下想法但它不起作用:
<?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);?>
如您所见,我尝试首先查询 'series' 的所有条款,然后将它们输出到一个列表中,其样式必须进入 tax 数组。我目前得到的结果是查询运行时所有的书都出现了。
谁能告诉我哪里错了?或者,如果您有另一种方法来排除自定义分类法的所有术语 w/o 每次添加新术语时手动调整代码,我洗耳恭听。
您需要它是一组术语,现在您使用的是单元素数组,其中元素是逗号分隔的术语列表。试试这个:
$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')
),
);