显示类别标题和类别内的三个最新帖子

时间:2015-02-11 作者:Bram Vanroy

我正在寻找与this question. 然而,这里提供的答案对我来说似乎很奇怪。我不知道这些论点是什么posts_per_page=-1 在我看来,这更像是一种黑客行为,而不是一个实际的解决方案。

我尝试了以下方法,它循环了前6个类别,效果很好。但是,我想从中排除一些类别,例如1和4。我不完全确定如何处理这个问题。

<div id="category-posts-content">

    <?php $i = 0; while ($i < 7) : ?>
        <?php query_posts(\'cat=\'.$i.\'&posts_per_page=3\'); ?>
            <?php if ( have_posts() ) : ?>
                <div class="subject">
                    <h3><?php single_cat_title(); ?></h3>
                    <ul>
                    <?php while ( have_posts() ) : the_post(); ?>
                        <li><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></li>            
                    <?php endwhile; ?>
                    </ul>
                </div>
            <?php endif; ?>
       <?php $i++; ?>
    <?php endwhile; ?>
    <?php wp_reset_query(); ?>
</div>
注意:有些帖子属于多个类别!

1 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

posts_per_page=-1 非常好。这用于获取所有帖子。至于你的代码,你永远不应该使用query_posts 除非你想故意破坏网页上的内容。这是最常用的功能之一,也是导致网站问题最多的功能之一。

我最近发表了一篇关于自定义查询的帖子,并包含了许多重要链接,指向您需要的重要帖子have to 阅读,包括为什么不应该使用query_posts. 你在上一个问题中说过,你需要学习很多,好吧,这篇文章和链接的文章应该是一条很好的学习曲线:-)。请检查一下here.

我觉得您的代码非常奇怪的是,您正在使用一个计数器来计算类别ID。这确实是不可预测的,因为所有标记、类别和自定义分类术语以及post格式都共享相同的表,因此对于给定的分类法,ID不是连续的。你应该利用get_categories() 要gt所有类别的数组。更可靠,而且您拥有exclude 参数以排除类别和include 仅需要特定类别时的参数

您需要为每个类别运行单独的查询。这可能会占用大量资源,因此您可能希望将结果放入瞬态(检查this post) 或缓存。

您可以尝试以下内容:

$categories = get_categories(array(\'exclude\' => \'4, 7\'));

foreach ($categories as $category) {

    $args = array(
        \'cat\' => $category->cat_ID,
        \'posts_per_page\' => 3
    );
    $q = new WP_Query($args);
    while($q->have_posts()) {
        $q->the_post();

        //your template tags and HTML mark up

    }
    wp_reset_postdata();

}
编辑最后一个音符,这是我最初错过的,你只能做一个while() 循环,而不是像您的问题中的两个:-)

结束

相关推荐

Loop returning only 1 result

我不知道为什么在运行循环时只返回1个结果。这是我的代码: <?php if ( is_front_page() && twentyfourteen_has_featured_posts() ) { // Include the featured content template. get_template_part( \'featured-content\' ); }