从循环中排除类别不起作用

时间:2013-01-23 作者:matt

我的索引中有此代码。php文件。我有一个不同的静态主页模板,这是博客页面。我试图排除所有类别为“new”的帖子,即tag\\u id“13”

<?php query_posts($query_string . \'&cat=-13\'); ?>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

<a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title(); ?>"><p class=\'lead\'><?php the_title(); ?></p></a>

<p><?php the_excerpt(); ?> <a href="<?php the_permalink()?>">read in full</a></p>

<p class=\'muted\'><small>Written by: <?php the_author_posts_link(); ?><br>               
            <?php the_time(\'F jS, Y\') ?></small></p><hr>

<?php endwhile; ?>
你知道为什么这不起作用吗?

3 个回复
SO网友:Chip Bennett

不使用query_posts(). 使用pre_get_posts 而是:

function wpse82745_filter_pre_get_posts( $query ) {
    // Only modify the main loop,
    // and only in the blog posts index
    if ( is_home() && $query->is_main_query() ) {
        $query->set( \'category__not_in\', array( \'13\' ) );
    }
}
add_action( \'pre_get_post\', \'wpse82745_filter_pre_get_posts\' );
此回调将从博客帖子索引的主循环中排除类别13。

SO网友:Mark Kaplun

这个$query_string 可能未初始化或未声明为全局变量。尝试添加

<?php global $query_string; ?>
在您的代码之前

SO网友:indextwo

我遇到了完全相同的神秘问题,但正在努力解决它。我尝试了这里评论中的所有建议,但似乎没有任何效果。

最后,由于关键是保留分页(因为这是在网站的主要博客部分,我想排除“其他新闻”),我尝试了以下方法:

//  Exclude the Other News category

$otherNews = get_category_by_slug(\'other-news\'); 
$excludeID = $otherNews->term_id;

//query_posts($query_string . \'&cat=-\' . $excludeID);   <-- Doesn\'t work for some reason

$args = array(\'cat\' => \'-\' . $excludeID, \'paged\' => $paged );
$paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;
query_posts($args);
。。。这似乎很有效。

结束

相关推荐

在小部件选项中使用wp_Dropdown_Categories

我有一个产品搜索小部件,当您选择某些产品时,会显示一个隐藏字段。我想在我的小部件选项中设置一个自定义类别,然后用于显示隐藏字段。当我将父category\\u id手动添加到代码中时,前端可以100%工作。现在我只需要在后端设置category选项。这是我目前拥有的,但它不起作用,因为它没有存储所做的选择。我省略了搜索表单,因为它没有使用任何小部件选项。class Equipment_Search extends WP_Widget { function Equipment_Se