现有wp_Query中的wp_Query停止下一篇文章,显示

时间:2015-06-14 作者:user2648610

我有一个查询,显示了我的博客主页上的5篇最新帖子。在第二篇帖子之后,我添加了一个div#more-news 然后,这些岗位按顺序进行。在我尝试在div中添加另一个查询之前,一切都正常有序#more-news.

现在发生的是前两个帖子加载良好,然后是div#more-news, 其中包含现有5篇文章之后的接下来5篇文章(6、7、8、9、10),但是在添加我的第二个查询后,而不是按顺序继续发布,它将页面标题“主页”显示为第四篇文章,然后显示为第三篇&;第4个职位。

试着更好地解释我在追求什么,这可能有助于显示我正在努力实现的秩序

[1] [2][morenews = 6,7,8,9,10]

[3] [4][5]

<?php $my_query = "showposts=5"; $my_query = new WP_Query($my_query); ?>
                <?php if ($my_query->have_posts()) :?> 
                    <?php $count = 0; ?>
                    <?php while ($my_query->have_posts()) : $my_query->the_post(); ?>
                        <?php $count++; ?>
                        <?php if ($count == 3) : ?>
                            <div id="more-news" class="col-lg-4">
                                <h2>More News</h2>
                                    <?php
                                    $mnquery = new WP_Query(array(
                                        \'posts_per_page\'   => 5,
                                        \'offset\'   => 5,

                                    ));
                                    while ($mnquery->have_posts()): $mnquery->the_post(); ?>
                                        <li>
                                            <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
                                        </li>
                                    <?php endwhile;?>
                                    <?php wp_reset_postdata(); ?> 
                            </div>
                        <?php endif ?>
                        <div class="col-lg-4">
                            <article <?php post_class(\'news-post\'); ?>>
                                <div class="innerPost">
                                    <a class="postLink" href="<?php the_permalink(); ?>">
                                        <?php the_post_thumbnail(\'full\', array( \'class\' => \'img-responsive\')); ?>
                                    </a>
                                    <div class="postDetails">
                                        <div class="postDetInner">
                                            <header>
                                                <div class="arrowpan"></div>
                                            </header>
                                        </div>
                                    </div>
                                </div>
                                <div class="news-post-inner">
                                    <?php 
                                        $category = get_the_category(); 
                                        if($category[0]){
                                            echo \'<a class="category-link" href="\'.get_category_link($category[0]->term_id ).\'">\'.$category[0]->cat_name.\'</a>\';
                                        }
                                    ?>
                                    <h2 class="entry-title"><a href="<?php echo get_permalink(); ?>"><?php echo get_the_title( $ID ); ?> </a></h2>
                                </div>
                            </article>
                        </div>
                    <?php endwhile; // end of one post ?>
                <?php endif; //end of loop ?>
            <?php wp_reset_postdata(); ?> 

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

我们可以简化您的代码,只需运行一个查询而不是两个查询。答案在于重绕循环并多次重新运行。我们将使用内置循环计数器,$current_post 数一数我们的帖子。记住,这个计数器从0, 而不是1, 因此,1号岗位将0

我们需要做的是

查询10篇帖子,而不是做两个五篇的循环

运行循环并仅显示前两个帖子

倒带我们的循环,然后重新运行它并输出POST 6-10

再次回放循环,再次运行循环,并显示帖子3-5

在代码中(仅骨架),您可以尝试以下操作:(由于新的短数组语法,需要PHP 5.4以上([]), 对于旧版本,请替换为旧的数组语法(array())

$args = [
    \'posts_per_page\' => 10
];
$q = new WP_Query( $args );

if ( $q->have_posts() ) {
    // Run the loop the first time to display the first two posts
    while ( $q->have_posts() ) {
        $q->the_post();

        if ( $q->current_post <= 1 ) {

            // Do what you need to do with the first two posts

        } 
    }

    // Rewind the loop
    $q->rewind_posts();
    // Run the loop the second time to display posts 6 - 10

    while ( $q->have_posts() ) {
        $q->the_post();

        if ( $q->current_post >= 5 && $q->current_post <= 9 ) {

            // Do what you need to do with posts 6 - 10

        } 
    }

    // Rewind the loop
    $q->rewind_posts();

    // Run the loop the third time to display posts 3 - 5
    while ( $q->have_posts() ) {
        $q->the_post();

        if ( $q->current_post >= 2 && $q->current_post <= 4 ) {

            // Do what you need to do with posts 3 - 5

        } 
    }
    wp_reset_postdata();
}

结束

相关推荐

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

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