【问题标题】:How to exclude posts from custom taxonomy term from Wordpress RSS Feed如何从 Wordpress RSS Feed 中排除自定义分类术语中的帖子
【发布时间】:2014-09-06 12:30:16
【问题描述】:

我正在寻找一种方法来从我的 RSS 提要中排除自定义分类术语中的所有帖子。我有一个称为“过滤器”的自定义分类法和该分类法中的一个称为“高级”的术语,我希望将其从我的 RSS 提要中排除。

我见过很多地方如何从类别中的术语中排除帖子,但还没有找到如何从自定义分类中的术语中排除帖子。

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

这是我在搜索时一直发现的,但这是针对类别的,我希望做同样的事情,但针对自定义分类法。谢谢

【问题讨论】:

    标签: php wordpress rss feed


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      使用名为 filter 的自定义分类示例和 premium 的术语 slug,以下代码将从 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',
          ]);
      

      请务必将此代码 sn-p 放在主题的 functions.php 文件中,因为它在 WordPress 生命周期的早期运行。尽情享受吧!

      【讨论】:

        猜你喜欢
        • 2016-10-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-08
        • 1970-01-01
        相关资源
        最近更新 更多