【问题标题】:wordpress wp_Query pagination with custom post_type issue带有自定义 post_type 问题的 wordpress wp_Query 分页
【发布时间】:2017-12-16 16:01:49
【问题描述】:

我正在尝试为两种帖子类型的结果进行分页,这是一种自定义帖子类型question 和普通post 首先,当我使用'posts_per_page' => -1; 显示所有结果without pagination 时,该函数工作正常

但是当我尝试进行分页时会出现问题,因为您可以看到分页功能正常工作,除了分页的最后几页(我猜其中包含问题 post_type 甚至最近的帖子类型的问题都正常出现)

这是我的完整代码

 <?php

    $my_query = new WP_Query(
        array(
            'post_type' => array('question', 'post'),
            'posts_per_page' => get_option('to_count_portfolio'), // -1 to show all results
            'author' => $post->post_author,
            'paged' => get_query_var('paged') ? get_query_var('paged') : 1
        )
    );


?>
<?php 
    while ( $my_query->have_posts() ) : $my_query->the_post();
?>

<span class="title">
    <?php echo get_post_type(); ?>
    <a href="<?php the_permalink(); ?>">
    <?php the_title(); ?>
    </a>
</span>
<br />

<?php endwhile;  ?>  
<?php 
    $big = 999999999; // need an unlikely integer
    echo paginate_links(
        array(
            'base' => str_replace( $big, '%#%', get_pagenum_link( $big ) ),
            'format' => '?paged=%#%',
            'current' => max( 1, get_query_var('paged') ),
            'total' => $my_query->max_num_pages
        )
    );
?>

如何使分页正常工作并导航到所有分页链接?

【问题讨论】:

    标签: wordpress pagination


    【解决方案1】:

    我想我想通了 解决方案是将 WP_Query 参数编辑为与站点 posts_per_page 不同的自定义数字

    'posts_per_page' => 11, // 13, or 20 ...
    

    而不是

    'posts_per_page' => get_option('to_count_portfolio'),
    

    为什么?我不知道,也许是某种冲突 有人可以尝试一下,看看该解决方案是否适用于他/她和我一样

    【讨论】:

      【解决方案2】:
      install this free plugin https://wordpress.org/plugins/wp-pagenavi/
      then refer below code
      
      $paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
      
      $args = array (
          'post_type'              => 'post',
          'cat'                    => '53',
          'paged' => $paged,  
          'posts_per_page'         => '10',
      );
      
      // The Query
      $query = new WP_Query( $args );
      
      // The Loop
      if ( $query->have_posts() ) {
          while ( $query->have_posts() ) {
              $query->the_post();
              get_template_part('parts/bl`enter code here`ogloop');
      
          }
      
      
          if(function_exists('wp_pagenavi'))
              {
                  wp_pagenavi( array( 'query' => $query ) );
              }
      
          wp_reset_postdata();
      
      } else {
          echo 'no posts here';
      }
      

      这将显示分页并且对您来说就像一个魅力。

      【讨论】:

      • 谢谢@prashant,我更喜欢自己做而不需要额外的插件,或者至少创建自己的插件
      【解决方案3】:

      将您的代码替换为:

       <?php
          $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
          if ($paged == "1") {
          $args = array(
                  'post_type' => array('question', 'post'),
                  'posts_per_page' => get_option('to_count_portfolio'), // -1 to show all results
                  'author' => $post->post_author,
                  'offset' => 0
          );
      } else {
          $offset = $paged * 5;
          $offset = $offset - 5;
          $args = array(
                  'post_type' => array('question', 'post'),
                  'posts_per_page' => get_option('to_count_portfolio'), // -1 to show all results
                  'author' => $post->post_author,
                  'offset' => $offset
          );
      }
      
      $loop = new WP_Query($args);
      ?>
      <?php 
          if ($loop->have_posts()) :while ($loop->have_posts()) : $loop->the_post();
      ?>
      
      <span class="title">
          <?php echo get_post_type(); ?>
          <a href="<?php the_permalink(); ?>">
          <?php the_title(); ?>
          </a>
      </span>
      <br />
      
      <?php endwhile;  ?>  
      <div class="pagination-grp">
          <?php
          $big = 999999999; // need an unlikely integer
          //$i=1;
      
          echo paginate_links(array(
              'base' => str_replace($big, '%#%', esc_url(get_pagenum_link($big))),
              'format' => '?paged=%#%',
              'current' => max(1, get_query_var('paged')),
              'prev_text' => __('<'),
              'next_text' => __('>'),
              'total' => $loop->max_num_pages
      
          ));
          wp_reset_postdata();
          endif;
          ?>
      </div>
      

      【讨论】:

      • 谢谢@Arpan 我用你的代码更改了我的代码,但我仍然在页面最后得到相同的 404
      猜你喜欢
      • 1970-01-01
      • 2016-09-29
      • 2013-09-29
      • 1970-01-01
      • 2012-12-31
      • 2018-09-23
      • 1970-01-01
      • 1970-01-01
      • 2014-04-17
      相关资源
      最近更新 更多