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

时间:2014-09-06 12:30:16

标签: php wordpress rss feeds

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

我见过很多地方如何排除某个类别中某个字词的帖子,但尚未找到如何从自定义分类中的术语中排除帖子。

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

这是我在搜索时始终找到的,但这是针对类别的,我希望做同样的事情,但是对于自定义分类法。感谢

2 个答案:

答案 0 :(得分:2)

我能够弄清楚如何从我的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中,您可以更改要将其调整为自定义分类的内容。我在这里做的是我排除我的自定义分类中称为“过滤器”的所有帖子以及“溢价”一词中的所有帖子。

答案 1 :(得分:0)

您可以使用功能强大的pre_get_posts挂钩在自定义分类中排除带有术语的帖子。

使用名为for _, f := range funcs { errc := make(chan error, 1) errcList = append(errcList, errc) go func(g func() error) { err := g() if err != nil { errc <- err } close(errc) }(f) } 的自定义分类和filter术语段的示例,以下代码将从RSS源中排除这些帖子:

premium

如果您担心分类术语slug被更改,您可以指定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 ); - 这可能是一个更安全的选择:

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', ]); 文件中,因为它在WordPress生命周期的早期运行。享受!