2014-09-06 42 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的生命週期中運行得很早。請享用!

相關問題