在另一个循环中循环时查询来自两个不同类别的帖子

时间:2016-10-26 作者:jobiin

我有一个查询,它从所有类别中提取帖子,除了一个ID为2的类别。在第一个循环中,我有一个if语句来计算偶数和奇数帖子,以改变我的html(工作正常)。

在每2篇文章的末尾插入一个div(我可以这样做),在该div中,我需要从ID为2的类别中随机查询一篇文章。

很难理解如何在循环中循环。我见过一些不同的例子,但似乎没有一个是有效的。

这是我的代码精简了一点。

<?php 
$counter = 0;
query_posts(\'cat=-2&orderby=date&order=DESC\'); while (have_posts()): the_post(); $counter++; ?>
    <?php if( $counter % 2 == 0 ) : ?>

        <!-- Displaying even posts here -->

    <?php else: ?>

        <!-- Displaying odd posts here -->

    <?php endif; ?>
    <?php if( $wp_query->current_post == 1 ) { ?>
        <div class="post__splitter">

            <!-- This is where a need to query a random post from the category with an ID of 2.  -->
            <!-- query_posts(\'cat=2&orderby=rand&post_per_page=-1\') -->

        </div>
    <?php } ?>
<?php endwhile; ?>
编辑:

这是我到目前为止的全部代码。。。遇到了显示所有帖子的问题,加上大约1000万个帖子。。我想不出来。。。

<?php 
$counter = 0;
$outer_query = new WP_Query( array( \'cat\' => \'-2\', \'orderby\' => \'date\', \'order\' => \'DESC\' ) ); while ($outer_query->have_posts()): the_post(); ?>
    <?php if( $counter % 2 == 0 ) : ?>  
        <div class="post">
            <div class="post__thumbnail"><?php the_post_thumbnail(); ?></div>
            <div class="post__content_wrapper">
                <div class="post__content">
                    <div class="post__title"><a href="<?php the_permalink();?>"><?php the_title(); ?></a></div>
                    <div class="post__caption"><?php the_excerpt(); ?></div>
                    <div class="post__details">
                        <a class="post__date" href="<?php the_permalink();?>"><?php the_date(\'F j, Y\', \'Posted on \'); ?></a>
                        <?php the_tags(\'<span class="post__tags">Tagged with: \',\', \',\'</span>\'); ?>
                    </div>
                </div>
            </div>
        </div>
    <?php else: ?> 
        <div class="post post--odd">
            <div class="post__content_wrapper">
                <div class="post__content">
                    <div class="post__title"><a href="<?php the_permalink();?>"><?php the_title(); ?></a></div>
                    <div class="post__caption"><?php the_excerpt(); ?></div>
                    <div class="post__details">
                        <a class="post__date" href="<?php the_permalink();?>"><?php the_date(\'F j, Y\', \'Posted on \'); ?></a>
                        <?php the_tags(\'<span class="post__tags">Tagged with: \',\', \',\'</span>\'); ?>
                    </div>
                </div>
            </div>
            <div class="post__thumbnail"><?php the_post_thumbnail(); ?></div>
        </div>
    <?php endif; ?>
    <?php if( $wp_query->current_post == 1 ) { ?>
        <div class="post__splitter">
            <?php
                $inner_query = new WP_Query(array(\'cat\' => 2, \'orderby\' => \'rand\'));    

                the_content();
            ?>
        </div>
    <?php } ?>
<?php endwhile; ?>

Final Working Edit

<?php 
$counter = 0;
$args = array (
    \'order\' => \'DESC\',
    \'orderby\'=> \'date\',
    \'cat\' => \'-2\',
);

// The Query
$outer_query = new WP_Query( $args ); if ( $outer_query->have_posts() ) : while ( $outer_query->have_posts() ) : $outer_query->the_post(); $counter++; ?>
<?php if( $counter % 2 == 0 ) : ?>  
        // even posts
    <?php else: ?> 
        // odd posts
    <?php endif; ?>
    <?php if( $outer_query->current_post ==1 ) { ?>

        <?php $args2 = array(
            \'cat\' => \'2\',
            \'posts_per_page\' => \'1\',
            \'orderby\' => \'rand\',
        );
        $inner_query = new WP_Query( $args2 ); if ( $inner_query->have_posts() ) : while ( $inner_query->have_posts() ) : $inner_query->the_post(); ?>

            // inner query pulling random post. 

        <?php endwhile; endif; ?>
    <?php } ?>

<?php endwhile; endif; ?>

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

您不应该使用query_posts() 为了这个或其他什么。

对于二次回路,您应该创建新的WP_Query 实例。由于您可以(而且应该)将实例分配给不同的变量,因此它们不会相互干扰。

因此,您的结构大致如下:

$outer_query = new WP_Query();

while( $outer_query->have_posts() ) : the_post;

    $inner_query = new WP_Query();

endwhile;

相关推荐

将wp_Query替换为wp_User_Query

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