显示排除类别中的最新帖子

时间:2015-10-27 作者:user3325376

我想从索引中排除类别帖子(&A);归档页面,所以我用functions.php:

function exclude_category($query) {
    if ( $query->is_home() || $query->is_archive() ) {
        $query->set( \'cat\', \'-33799\' );
    }
    return $query;
}
add_filter(\'pre_get_posts\', \'exclude_category\');
在这里之前一切都很好,但我需要在所有页面的框中显示该类别的最新帖子:

$args = array ( \'category\' => "33799", \'posts_per_page\' => 2 );
$recentposts = get_posts( $args );
foreach ( $recentposts as $post ) : setup_postdata( $post ); 
    if ( get_post_meta( $post->ID, "news_thumb", TRUE ) ) {
        $img = get_post_custom_values( "news_thumb", $post->ID );
    } else {
        $img = \'images/no_pic.jpg\';  
    }
    if ( get_post_meta( $post->ID, "news_short_content", TRUE ) ) {
        $content = get_post_custom_values( "news_short_content", $post->ID );
    } else {
        $content = \'\';   
    }           
    ?>
    SHOW_SOMETHING_IN_LOOP
    <?php 
endforeach;
当我将此脚本添加到header.php, 我得到了错误的输出。我可以理解为什么会发生这种情况,因为我在查询中排除了该类别,但我如何才能解决这个问题?

1 个回复
SO网友:Dave Romsey

彼得·古森通过这一建议解决了这个问题。

if ( $query->is_home() || $query->is_archive() )
应为:

if (!is_admin() && $query->is_main_query() && ( $query->is_home() || $query->is_archive() ) )
然后解释了此解决方案起作用的原因:

is_main_query() 仅在主查询中返回true。pre_get_posts 更改所有查询的后端和前端,查询之间没有指定。因为您只想使用pre_get_posts, 而不是所有其他查询,您需要通过检查当前查询是否是主查询来排除所有其他查询。

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post