2014-09-06 49 views
1

我正在寻找一种方法来排除我的RSS源中的自定义分类术语中的所有帖子。我有一个称为“过滤器”的定制分类法,并且该分类法中称为“高级”的术语,我期望从我的RSS源中排除。如何排除Wordpress RSS Feed中的自定义分类术语中的帖子

我见过很多地方如何排除某个类别中某个词语的帖子,但还没有找到如何从一个定制分类中的词语中排除帖子。

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

这是我觉得搜索这个时候,但是这是类所有的时间,我希望做同样的事情,但对于一个自定义分类。谢谢

回答

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中,您可以更改要调整为自定义分类的内容。我在这里做的是,我排除了我的自定义分类中称为“过滤器”的所有帖子以及所有处于“溢价”的帖子

0

您可以使用令人难以置信的强大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的生命周期中运行得很早。请享用!

相关问题