loop inside the foreach

时间:2016-11-04 作者:hguser

在我的索引页面中,我想为每个类别显示12篇文章,因此我迭代了这些类别:

<?php foreach ($sub_cates as $cate) { ?>

    <section class="b">
                <div class="grid">
                    <header class="title">
                        <h2><?php echo $cate->name ?><a class="more" href="<?php echo get_category_link($cate) ?>">More</a></h2>
                    </header>
                    <div class="row">
                        <?php
                        //rewind_posts();
                        query_posts(array(
                            "category" => $cate->term_id,
                            "numberposts" => 12
                        ));
                        $w = $GLOBALS[\'wp_query\'];
                        while (have_posts()) {
                            the_post();
                            ?>
                            <article class="col-xs-4 col-sm-3 col-md-2 ">
                                <?php get_template_part("grid-item") ?>
                            </article>
                            <?php
                        }
                        ?>
                    </div>

                </div>
    </section>
<?php } ?>
然而,即使在我使用rewind_posts 在循环之前。

发生什么事了?

2 个回复
SO网友:hguser

我终于明白了。

看来get_postsquery_posts 当我使用get_posts 我可以这样设置参数:

                    get_posts(array(
                        "category" => $cate->term_id,
                        "numberposts" => 12
                    ));
当我使用query_posts 我已将其更改为:

                    query_posts(array(
                        "cat" => $cate->term_id,
                        "numberposts" => 12
                    ));
请注意categorycat. 这是一个悲惨的故事(

SO网友:jgraup

的工作rewind_posts() 就是回放相同的查询——在本例中,这不是您想要的。

你试过了吗get_posts() 相反wp_reset_postdata() 对于$post 对象,但wp_reset_query() 在这种情况下,循环后不需要。

<?php foreach ( $sub_cates as $cate ) { ?>

    <section class="b">
        <div class="grid">
            <header class="title">
                <h2><?php echo $cate->name ?><a class="more" href="<?php echo get_category_link( $cate ) ?>">More</a>
                </h2>
            </header>
            <div class="row">
                <?php

                $posts = get_posts( array (
                    "category"    => $cate->term_id, // empty value will query a bunch of posts
                    "numberposts" => 12,
                ) );

                foreach ( $posts as $post_object ) {

                    setup_postdata( $GLOBALS[\'post\'] =& $post_object );

                    ?>
                    <article class="col-xs-4 col-sm-3 col-md-2 ">
                        <?php get_template_part( "grid-item" ) ?>
                    </article>
                    <?php
                }

                wp_reset_postdata(); // like wp_reset_query() but for $post

                ?>
            </div>

        </div>
    </section>
<?php } ?>

相关推荐

将wp_Query替换为wp_User_Query

我在插件中制作了一些订阅者档案和单曲(个人资料页),其中我还包括了一个“用户单曲”模板,通过template_include. 不过,我正在尝试从插件中删除一些模板,以使其使用主题模板。我用了locate_template( \'single.php\' ) 从活动主题中选择单个模板。我没有使用全局wp_query 在本例中显示我的内容,但页面显示了基于查询默认值的循环(十篇帖子)。我想知道的是,我是否可以完全放弃默认查询,用wp_user_query 我可以将查询到的用户ID输入其中。然后我想筛选the