Wordpress 修改循环以排除属于某个类别而不属于其他类别的帖子
在Wordpress中: 我需要从主WP循环中排除某些类别的帖子。但前提是该帖子没有其他类别 例如,如果所讨论的类别被称为Wordpress 修改循环以排除属于某个类别而不属于其他类别的帖子,wordpress,Wordpress,在Wordpress中: 我需要从主WP循环中排除某些类别的帖子。但前提是该帖子没有其他类别 例如,如果所讨论的类别被称为X 测试1:只属于X类别的帖子将被排除在外 测试2:将包括属于X和Y类别的帖子 测试3:属于Z或Foo或任何其他内容的帖子也将被包括在内 到目前为止,我有以下代码: function exclude_category( $query ) { if ( $query->is_home() && $query->is_main_query()
X
测试1:只属于X
类别的帖子将被排除在外
测试2:将包括属于X
和Y
类别的帖子
测试3:属于Z
或Foo
或任何其他内容的帖子也将被包括在内
到目前为止,我有以下代码:
function exclude_category( $query ) {
if ( $query->is_home() && $query->is_main_query() ) {
$query->set( 'cat', '-271' );
}
}
add_action( 'pre_get_posts', 'exclude_category' );
但这适用于测试1和3(上文),但不适用于测试2。如何修改查询以实现这一点?我假设包括所有类别y,将包括x和y中包含的所有帖子。我想出了一种方法来实现这一点,尽管我不确定这是最好的方法 基本上,我要求WP提供所有类别的列表,然后我连接这些类别的列表,减去我想要排除的类别。然后,我将其输入到WP查询中的“cat”参数中。它似乎像我希望的那样起作用,但它似乎也有点不太对劲。如果有任何反馈,我将不胜感激 在本例中,
271
是我的x
类别的id
function exclude_category( $query ) {
$terms = get_terms( array(
'taxonomy' => 'category',
'hide_empty' => false,
) );
$catquery = "";
foreach($terms as $term) {
if($term->term_id != 271) {
$catquery .= $term->term_id . ",";
}
}
$catquery = substr($catquery, 0, -1);
if ( $query->is_home() && $query->is_main_query() ) {
$query->set( 'cat', $catquery );
}
}
add_action( 'pre_get_posts', 'exclude_category' );
编辑
我最终将其更改为分类查询,以便将include\u children
设置为false
function exclude_category( $query ) {
$terms = get_terms( array(
'taxonomy' => 'category',
'hide_empty' => false,
) );
$catarray = [];
foreach($terms as $term) {
if($term->term_id != 271) {
array_push($catarray, $term->term_id);
}
}
if ( $query->is_main_query() && $query->is_home()) {
$query->set( 'tax_query', array( array(
'taxonomy' => 'category',
'field' => 'term_id',
'terms' => $catarray,
'include_children' => false
)));
}
}
add_action( 'pre_get_posts', 'exclude_category' );
您给出了一个案例场景,我给出了消除x类中所有帖子的解决方案,因为您不理解,这并不意味着它是错误的,我猜您希望我为您编写代码