如何仅排除某个类别的最新帖子以显示在WordPress的首页上?

时间:2013-01-23 21:08:56

标签: php wordpress

我只希望从首页中排除该类别的最新帖子。应显示同一类别中的所有其他类别。我似乎无法想出这个。这是我到目前为止所得到的,但它从头版中排除了整个类别。

function exclude_category2($query) { 
if ( $query->is_home ) { 
$query->set('cat', '-1,-4,-36'); 
} 
return $query; 
} 
add_filter('pre_get_posts', 'exclude_category2'); 

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您可以使用像template_redirect这样的钩子来使用array_shift从全局$ posts数组中删除顶部元素,就像gok建议的那样(有点,他并没有真正说明如何去做)。在这种情况下,它看起来像这样

add_action( 'template_redirect', function() {
    global $posts;
    array_shift( $posts );
});

但我认为更优雅的方法是这个

add_action( 'loop_start', function( $args ) {
    $args[0]->next_post();
});

如果你把它放在functions.php中,在Wordpress循环的开头,它将自动转到下一篇文章,这意味着它将始终跳过第一篇文章。

如果您只想在某些页面上执行此操作,请在函数内使用相关的模板标记,如is_home()if ( is_home() ) $args[0]->next_post();

如果您不使用PHP版本> = 5.3,则必须为该函数命名,因为较低版本的PHP不支持匿名函数。