多个wp_Query循环在所有页面上显示前5个帖子,而不是较旧的帖子[已解析]

时间:2014-05-23 作者:user3628554

我试图在一个单独的布局中突出显示最新的帖子,并在一个砌体索引中突出显示其余的帖子。每页有5篇帖子,我在之前的帖子页面上也得到了最新的5篇帖子。

我把所有的帖子都放在一个单圈的砖石索引下。我尝试通过css的第一个类型属性使砌体索引的第一个元素具有不同的宽度,但这会干扰砌体布局。然后我决定对第一篇文章使用一个单独的循环,对其余的文章使用带有砖石布局的第二个循环,但我最终得到了每个页面上显示旧文章的前5篇文章。请告知如何解决此问题。提前感谢!

<?php 
//First Query
$args1 = array(
\'posts_per_page\'   => 1,
\'post_type\'        => \'albums\',
\'post_status\'      => \'publish\',
 ); 
$query1 = new WP_Query($args1);

//First Loop
if ( $query1->have_posts() ) {
  while ( $query1->have_posts() ) {
    $query1->the_post();?>
    <?php get_template_part( \'entry-slide\',get_post_type(\'albums\') ); ?>
    <?php comments_template(); 
  }
 }
   wp_reset_postdata();

  echo\'<div id="masonry-index">\';
  //Query2

$args2 = array(
\'offset\'           => 1,
\'post_type\'        => \'albums\',
\'post_status\'      => \'publish\',
\'suppress_filters\' => true ); 

$query2 = new WP_Query( $args2 );

//loop2
if ( $query2->have_posts() ) {
 while( $query2->have_posts() ) {
    $query2->the_post();?>
    <div class="listalbums">
    <?php get_template_part( \'entry\',get_post_type(\'albums\') ); ?>
    </div>
   <?php comments_template(); 
   }
 } //end second loop 

 echo \'</div><!--End Masonry Index-->\';
 get_template_part( \'nav\', \'below\' );?>


    </div><!--End Main Content-->
   </div><!--End Col-->
 <div class="col-md-3">
 <?php get_sidebar(); ?>
 </div>
 </div></div><!--End Container Fluid-->
  </div><!--End Content Area-->

  <?php get_footer(); ?>
UPDATE #1:哇!这很有效(我在循环之前添加了$paged变量):

  $paged = ( get_query_var(\'paged\') ) ? get_query_var(\'paged\') : 1;
然后在args中,我删除了偏移量并添加了以下内容:

  \'paged\' => $paged
但现在我得到了一个重复的最新帖子,因为删除了第二个循环中的偏移量。请分享您对如何删除副本的想法。这是否可行:如果是第一页,请在$args2的第二个循环中添加偏移量?让我试试,我将分享这是如何工作的。

UPDATE #2我添加此代码是为了在第1页上添加偏移量并删除重复的最新帖子:

if ( $paged == 1 ){
          $offset=1;
      } else{
          $offset=\'\';
      }
这很有帮助,但我在以前的帖子中得到了一个重复的帖子。我还没有弄清楚为什么会这样(如果你能分享你的想法,我将不胜感激)。好好休息吧。

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

这有助于消除前5篇帖子在所有页面上重复出现的问题:

$paged = ( get_query_var(\'paged\') ) ? get_query_var(\'paged\') : 1;
然后在args中,我删除了偏移量并添加了以下内容:

“paged”=>$页

要避免在第一页中出现帖子重复,请执行以下操作:

 if ( $paged == 1 ){
      $offset=1;
  } else{
      $offset=\'\';
  }
这篇文章在前几页中仍有重复。所以我还没有得到一个完整的解决方案。

SO网友:Matt Royal

也许可以根据您为“每页帖子”参数设置的值,检查第一个循环中是否分页。如果未分页,则通过模板显示结果,如果已分页,则不执行任何操作。。。

//First Loop
if ( $query1->have_posts() ) {
  while ( $query1->have_posts() ) {
    $query1->the_post();?>
    <?php if ( is_paged() == false ) { get_template_part( \'entry-slide\',get_post_type(\'albums\') ); } ?>
    <?php comments_template(); 
  }
 }
   wp_reset_postdata();
我还没有测试过这个。is\\u paged()的引用;条件:http://codex.wordpress.org/Function_Reference/is_paged

结束

相关推荐

ACF loop and php formatting

下面的php将遍历每个页面,然后输出ALL ACF自定义字段的。我需要的帮助格式是一个条件语句,它将所有$fields, 除了$field_name 在自己的容器中包含“标题”。$pages = get_pages( array(\'sort_column\' => \'menu_order\')); foreach ($pages as $page_data) { $fields = get_fields($page_data); if( $fields