我正在寻找一种方法,从我的RSS提要中排除自定义分类法术语中的所有帖子。我有一个名为"过滤器"的自定义分类法,该分类法中有一个术语名为"高级",我希望将其从RSS提要中排除。
我在很多地方看到了如何从类别中的术语中排除帖子,但还没有找到如何从自定义分类法中的术语排除帖子。
function excludecatfeed($query) {
if(is_feed()) {
$query->set('cat','-1');
return $query;
}
}
add_filter('pre_get_posts', 'excludecatfeed');
这是我在搜索时一直发现的,但这是针对类别的,我希望做同样的事情,但针对自定义分类法。感谢
我能够想出如何从wordpress提要中排除自定义分类法。
add_filter('pre_get_posts','better_editions_archive');
function better_editions_archive( $query ) {
if ( $query->is_feed() ) {
$query->set( 'post_type', array( 'post' ) );
$query->set( 'tax_query', array(
array(
'taxonomy' => 'filter',
'field' => 'slug',
'terms' => 'premium',
'operator' => 'NOT IN'
)
) );
}
return $query;
}
在tax_query中,您可以更改要将其调整为自定义分类法的内容。我在这里所做的是,我排除了自定义分类法中名为"过滤器"的所有帖子和术语"高级"中的所有帖子。
您可以使用功能强大的pre_get_posts
钩子来排除自定义分类法中带有术语的帖子。
使用名为filter
的自定义分类法和premium
的术语段的示例,以下代码将从RSS提要中排除这些帖子:
add_action( 'pre_get_posts', function ( $query ) {
if ( is_admin() || ! $query->is_main_query() ) {
return;
}
// Exclude Terms by Slug from RSS Feed
if ( $query->is_feed() ) {
$tax_query = array([
'taxonomy' => 'filter',
'field' => 'slug',
'terms' => [ 'premium' ],
'operator' => 'NOT IN',
]);
$query->set( 'tax_query', $tax_query );
}
}, 11, 1 );
如果您担心分类术语slug被更改,您可以指定term_id
——这可能是一个更安全的选择:
$tax_query = array([
'taxonomy' => 'filter',
'field' => 'term_id',
'terms' => [ '1234' ],
'operator' => 'NOT IN',
]);
作为额外的奖励,如果你想排除所有在自定义分类法中有任何术语的帖子,可以使用以下方法:
$taxonomy = 'filter';
$terms = get_terms([
'taxonomy' => $taxonomy,
'fields' => 'ids',
]);
$tax_query = array([
'taxonomy' => $taxonomy,
'field' => 'term_id',
'terms' => (array) $terms,
'operator' => 'NOT IN',
]);
一定要把这个代码片段放在主题的functions.php
文件中,因为它在WordPress生命周期的早期运行。享受