我有一个查询,显示了我的博客主页上的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(); ?>
最合适的回答,由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();
}