首页 文章

如何从Wordpress RSS Feed中排除自定义分类术语中的帖子

提问于
浏览
2

我正在寻找一种方法来从我的RSS提要中排除术语中的所有帖子以获取自定义分类 . 我有一个名为“过滤器”的自定义分类和一个名为“premium”的分类中的术语,我希望将其从RSS源中排除 .

我已经看过很多地方如何从一个类别中的术语中排除帖子,但还没有找到如何从自定义分类中的术语中排除帖子 .

function excludecatfeed($query) {
           if(is_feed()) {
                          $query->set('cat','-1');
                          return $query;
           }
}
add_filter('pre_get_posts', 'excludecatfeed');

这是我一直在寻找这个,但这是为了类别,我希望做同样的事情,但对于自定义分类 . 谢谢

2 回答

  • 0

    我能够弄清楚如何从我的wordpress feed中排除自定义分类 .

    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中,您可以更改要将其调整为自定义分类的内容 . 我在这里做的是我排除我的自定义分类中称为“过滤器”的所有帖子以及术语“高级”中的所有帖子 .

  • 2

    您可以使用功能强大的pre_get_posts钩子在自定义分类法中使用Term排除帖子 .

    使用名为 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的生命周期中提前运行 . 请享用!

相关问题