从wp_Query中排除子类别

时间:2014-03-04 作者:tmyie

我有一个简单的循环,它通过类别street-style:

$street_style_tags = array(
\'category_name\' => \'street-style\',
\'posts_per_page\' => 25,
\'post_type\' => \'post\',
\'post_status\' => \'publish\',
\'orderby\' => \'date\',
\'order\' => \'DESC\'    
 );
然而,它在网站的其他地方出现了循环(因为它的父类别)。有什么方法可以排除street-style 除了这个,还有其他的循环吗?

3 个回复
SO网友:gmazzap

这很容易。WP\\U查询具有不同的参数,可用于排除类别。(小)问题在于如何从所有循环中排除该类别,仍然能够直接查询它。

您可以使用\'pre_get_post\' 动作钩,检查\'category_name\' 当前查询的参数,以及它是否与\'street-style\', 使用排除它\'category__not_in\' WP_Query 论点

如果你不检查is_main_query() 它将应用于所有查询,包括主查询和自定义查询。

保持使用能力\'category__not_in\' 参数,您还应该检查该参数是否已设置,如果已设置,则将实际参数与排除“street style”类别的参数合并。

也许代码比文字更简洁:

add_action(\'pre_get_posts\', function($query) {

 if ( is_admin() ) return;
 if ( $query->get(\'category_name\') !== \'street-style\' ) {
   $not_now = $query->get(\'category__not_in\') ? : array();
   $street_style = get_term_by(\'slug\', \'street-style\', \'category\');
   if ( is_object($street_style) && isset($street_style->term_id) ) {
     $query->set(\'category__not_in\', array_merge($not_now, $street_style->term_id ) );
   }
 }

});
使用此代码,您将能够在“street style”类别中仅显式获取帖子设置\'category_name\' “街头风格”,就像你做操作码一样。

请注意,我的代码需要PHP 5.3或更新版本。

SO网友:s_ha_dum

如果要全局排除类别,请在pre_get_posts.

function exclude_cat_wpse_136798($qry) {
    $qry->set(\'category__not_in\',array(1));
}
add_action(\'pre_get_posts\',\'exclude_cat_wpse_136798\');
这将适用于网站上的每个查询,我怀疑这会导致问题。但我不知道该适用什么条件。你的问题没有提供足够的细节。然而,要使这一个查询工作,只需事先删除该查询,然后再将其放回即可

remove_action(\'pre_get_posts\',\'exclude_cat_wpse_136798\');
// your query

add_action(\'pre_get_posts\',\'exclude_cat_wpse_136798\');

SO网友:cnick

在查询其他循环时,可以使用

\'category__not_in\' => array( get_cat_ID(\'street-style\') )
在查询参数中。

或者,在不希望这些帖子出现的相同循环中,可以使用

if ( in_category(\'street-style\') )  continue;
跳过循环中的特定帖子。然而,这可能会忽略您期望从循环中返回的帖子数量。

结束

相关推荐

Multiple loops in Genesis

所以我想在我的主页上创建两个循环。一个可以显示页面自身内容的页面,然后在其正下方有一个网格循环,用于从“新闻”类别中获取两篇最新帖子。我真的找不到一种方法来做这件事,所以我四处黑客攻击,直到我让它工作起来,但我不确定这是正确的做法,有人能告诉我我可以/应该对这段代码做些什么改进吗?以下是我的截图:http://s18.postimg.org/knrq6sert/2013_11_13_22_55_58.png主题:MetroTemplate:主页。php//* Add support for Genesis