【问题标题】:WordPress pagination not working for get_posts() function?WordPress 分页不适用于 get_posts() 函数?
【发布时间】:2018-04-25 10:50:45
【问题描述】:

我已经制作了一个模板并为推荐页面分配了一个模板。 以下所有代码都放在我的模板文件中。

我的问题是 NextPrev 链接甚至没有显示在推荐页面上。我只想使用get_posts 查询来检索数据。

如何显示get_posts 的分页?

global $post;
$paged = (get_query_var('paged')) ? get_query_var('paged') : 0;

$postsPerPage = 2;
$postOffset = $paged * $postsPerPage;

$args_testimonial = array(
'post_type' => 'testimonial',
'offset'          => $postOffset,
'posts_per_page'  => $postsPerPage,
'orderby'=> 'title',
'order'=>'DESC'
);

$data_testimonial = get_posts( $args_testimonial ); 



foreach ( $data_testimonial as $post_testimonial ) : setup_postdata( $post_testimonial ); 

                $testimonee_title = get_the_title($post_testimonial->ID);
                $testimonee_post = get_post($post_testimonial->ID);
                $testimonee_content = $testimonee_post->post_content; 
                $testimonee_image = wp_get_attachment_image_src( get_post_thumbnail_id( $post_testimonial->ID ), 'single-post-thumbnail' );




       if ( $testimonee_title || $testimonee_content || $testimonee_image ) { ?>
        <div class="single-testimonial">
        <?php if ( $testimonee_content ) { ?>
            <div class="testimonial-content">
                <p>Dear Gary’s Carpet Cleaning</p>
                <p><?php echo $testimonee_content; ?></p>
            </div>
            <?php } 

            if ( $testimonee_title || $testimonee_image ) { ?>
            <div class="testimonial-person">
                <div class="testimonial-image">
                <?php if ( $testimonee_image ) { ?>
                    <img src="<?php echo $testimonee_image[0]; ?>" alt=" "/>
                <?php } else { ?>
                <img src="<?php echo get_template_directory_uri(); ?>/assets/images/testimonial-dummy-image.png" alt=" "/>
                <?php } ?>
                </div>
                    <?php if( $testimonee_title ) { ?>
                <div class="testimonial-name">
                    <p><strong>-<?php echo $testimonee_title; ?></strong></p>
                </div>
                <?php } ?>
            </div>
            <?php } ?>

        </div>

        <?php } endforeach; 
        next_posts_link( 'Prev'); 
        previous_posts_link('Next'); 
        wp_reset_postdata();

【问题讨论】:

  • 你找到解决办法了吗?
  • @rowmoin 还没有,我已经发布了这个问题以寻求解决方案
  • 我试图在下面的答案部分给出一个解决方案。

标签: php wordpress function pagination


【解决方案1】:

如果您需要分页查询,请不要使用get_posts

我认为这里最简单和最合适的是利用WP_Query 来构建您的自定义查询 我确实认为next_posts_link()previous_posts_link() 更适合与WP_Query 一起使用

global $post;
$paged = (get_query_var('paged')) ? get_query_var('paged') : 0;

$postsPerPage = 2;
$postOffset = $paged * $postsPerPage;

$args_testimonial = array(
'post_type' => 'testimonial',
'offset'          => $postOffset,
'posts_per_page'  => $postsPerPage,
'orderby'=> 'title',
'order'=>'DESC'
);
$postslist = new WP_Query( $args_testimonial );

    if ( $postslist->have_posts() ) :
        while ( $postslist->have_posts() ) : $postslist->the_post(); 
            the_title();
        endwhile;
        next_posts_link( 'Older Entries', $postslist->max_num_pages );
        previous_posts_link( 'Next Entries &raquo;' ); 
        wp_reset_postdata();
        endif;

【讨论】:

    【解决方案2】:

    你可以试试这个替换你的分页代码,但不确定它是否有效:

     <?php 
     {$paged=$_GET['current-page'];}else{$paged=1;}
     $total_pages=$data_testimonial ->max_num_pages;
     if($total_pages>1){$current_page=$paged;
     ?>
    <?php
          echo '<ul class="pagination"><li >';
          $big=999999999;
          echo paginate_links (array('base'=>@add_query_arg('current-page','%#%'),
          'format'=>'?current-page=%#%','current'=>$current_page,'total'=>$total_pages,'mid_size'=>4,'type'=>'plain',
          'prev_next'=>True,));
          echo '</li>
          </ul>';?>
    <?php }wp_reset_postdata();wp_reset_query();?>
    

    【讨论】:

      【解决方案3】:

      经过很长时间我终于解决了这个问题。

         <?php 
           $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
                 $postsPerPage=9;
                 $postOffset = $paged * $postsPerPage;
                 
                 $past_events = get_posts( 
                    array( 
                    'product_cat' => 'past-events',    
                    'numberposts'  => $postsPerPage, 
                    'post_type'    => 'product',
                    'order'        => 'DESC',
                    'offset'       =>  $postOffset-$postsPerPage,
                    ) 
                  );
      foreach($past_events as $key => $val){
         print_r($val);
      } 
      

      【讨论】:

      • Pratab 有没有办法在相同的 get_posts 方法中获取帖子总数? (不使用额外的查询。)
      • 我认为另一个查询更好。
      猜你喜欢
      • 1970-01-01
      • 2017-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-24
      • 1970-01-01
      • 2015-07-24
      • 2019-08-16
      相关资源
      最近更新 更多