如何从发布循环中排除自定义分类法


22

有没有简单或容易的方法可以将所有帖子从循环中的自定义分类中排除?我一直在寻找高潮和低潮,而SE,SO或Google似乎都没有直接的答案。

我知道可以通过WPDB查询来完成,但是这似乎是一条巨大的绳子,可以跳过一些相当简单的事情。


5
在该分类法中有任何术语的帖子,或者您是指自定义分类法的特定术语?示例:如果我的分类法是水果,并且我有两个词,苹果和橙子,我要排除所有有水果的职位,还是仅有苹果的职位?
t31os 2011年

扩展@ t31os问:post_tag,category,link_category等都是_builtin分类法。因此,即使您将帖子标签称为“术语”,它也仍然只是一个分类法(非层次结构),并且与“类别”(层次结构)分类法处于相同的“级别”。
kaiser

继续@ t31os示例:我试图排除分类法水果中的所有帖子(无论它们是在“苹果”,“豌豆”还是“橙色”中)。
托马斯

Answers:


13

您想使用 NOT EXISTS运算符与传递分类标准标记一起使用,该分类标记告诉查询在循环内不要包含自定义分类标准中选择的任何类别。

要排除分类法“水果”中的所有帖子(无论水果种类如何),以下是代码段:

$args = array(
    'post_type'      => 'post',
    'tax_query'      => array(
        array(
            'taxonomy' => 'fruit',
            'operator' => 'NOT EXISTS'
        )
    )
);

$query = new WP_Query( $args );

2
这看起来应该比说出NOT INXX数更有效terms。该术语列表可能会扩大到很大的范围,但这应该涵盖具有该分类法名称的所有术语。
italiansoda

尽管这是OP的问题的答案(已投票),但我们大多数人可能想排除一个特定术语或一组术语。为此,您需要此答案
rinogo

26

解决这个问题的方法并未真正公开,但应该公开。

您可以执行以下操作:

$args['tax_query'] = array(
    array(
        'taxonomy' => 'category',
        'terms' => array('cat', 'dog'),
        'field' => 'slug',
        'operator' => 'NOT IN',
    ),
);
query_posts($args);

运算符参数可以采用其他术语,但是上面的代码基本上是说从分类法“类别”中获取所有没有术语“猫”或“狗”的帖子。


聪明。但是,我仍然需要手动输入该分类法中的每个术语,对吗?
Thomas

我没有跟着你对不起。在条件数组中,定义要从循环查询中排除的条件值。如果您希望它们是动态的,则可以在每个帖子中添加一个自定义的元值,然后在查询中检查该元键的值,然后按照您的意思进行设置。
Dwayne Charrington

啊。我明白您的意思,但这确实很麻烦。
托马斯(Thomas)

我还没有真正看过,但是肯定有一个插件可以满足您的要求吗?
Dwayne Charrington

8

这是针对自定义帖子类型和自定义分类法的方法:

$happening = new WP_Query(
array( 
  'post_type'  => 'news',        // only query News post type
  'tax_query' => array(
    array(
        'taxonomy'  => 'news-cat',
        'field'     => 'slug',
        'terms'     => 'media', // exclude items media items in the news-cat custom taxonomy
        'operator'  => 'NOT IN')

        ),
   )
);

这只是将自定义分类法从自定义帖子类型中排除的最佳方法。


0

我做了以下操作以排除某个分类术语中的帖子:

$argos = array( 
    'tax_query' =>  array (
        array(
            'taxonomy' => 'topics', // My Custom Taxonomy
            'terms' => 'college', // My Taxonomy Term that I wanted to exclude
            'field' => 'slug', // Whether I am passing term Slug or term ID
            'operator' => 'NOT IN', // Selection operator - use IN to include, NOT IN to exclude
        ),
    ),
    'post_type'=>'page', // Post type I want to show, can be a custom post type too
    'posts_per_page' => -1,
    'orderby' => 'title',
    'order'=>'ASC',
    'post_parent' =>$post->ID // show child posts or pages of current page/post
); 

$query = new WP_Query( $args );

0
query_posts( array(
    'post_type' => 'listings',
    'tax_query' => array(
        array(
            'taxonomy' => 'status',
            'field'    => 'slug',
            'terms'    => 'sold',
            'operator' => 'NOT IN'
            ),
        )
    )
);

此代码不包括状态=>从post_type =>列表中出售


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.