【问题标题】:pagination on custom post wp_query自定义帖子 wp_query 上的分页
【发布时间】:2013-01-13 18:42:04
【问题描述】:
<?php
        $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
        $loop = new WP_Query(
            array(
                'post_type' => 'html5-blank',
                'posts_per_page' => 5,
                'paged'=>$paged
            )
        );
?>
<?php if ($loop->have_posts()): while ($loop->have_posts()) : $loop->the_post(); ?>      
 //Loop Code Here..
 <?php wp_reset_query(); ?> 
   <nav>
        <?php previous_posts_link( 'Newer posts &raquo;' ); ?>
        <?php next_posts_link('Older &raquo;') ?>
    </nav>
<?php endwhile; ?>
<?php else: ?>

当我输入结果时,下一页上的网址是:www.mywebsite.com/blog/page/2 is WORKING。 但我无法显示分页链接。

哪里出错了?

编辑:分页链接显示在page/2/ 但不在主博客页面中。 为什么?

【问题讨论】:

    标签: wordpress pagination wordpress-theming custom-post-type


    【解决方案1】:

    我建议使用自定义帖子 wp_query 进行分页的 3 种方法。不幸的是,直到今天还没有很多关于这方面的好信息,或者至少在某些情况下还不清楚。希望这会有所帮助!

    请注意,您确实也将 wp_reset_postdata() 放在了错误的位置,但还需要做更多工作才能使其正常工作。

    选项 1 - 使用 max_num_pages 变量

    <?php
        $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
        $args = array( 
            'posts_per_page' => 1, 
            'paged' => $paged, 
            'post_type' => 'cpt_type'
        );
        $cpt_query = new WP_Query($args);
    ?>
    
    <?php if ($cpt_query->have_posts()) : while ($cpt_query->have_posts()) : $cpt_query->the_post(); ?>
    
        //Loop Code Here...
    
    <?php endwhile; endif; ?>
    
    <nav>
        <ul>
            <li><?php previous_posts_link( '&laquo; PREV', $cpt_query->max_num_pages) ?></li> 
            <li><?php next_posts_link( 'NEXT &raquo;', $cpt_query->max_num_pages) ?></li>
        </ul>
    </nav>
    

    您将在上面看到,previous_posts_linknext_posts_link 的格式略有不同,它们现在访问 max_num_pages 变量。访问max_num_pages 时请务必使用您自己的查询变量名称。请注意,我使用 $cpt_query 因为这是我的查询示例的变量。

    选项 2 - 暂时使用 $wp_query 变量进行循环查询

    这是很多人推荐的,但要小心将 $wp_query 变量分配给临时变量并重新分配它,否则您会遇到各种麻烦。这就是为什么我推荐选项#1。如CSS Tricks 所述,您可以执行以下操作:

    <?php 
      $temp = $wp_query; 
      $wp_query = null; 
      $wp_query = new WP_Query(); 
      $wp_query->query('showposts=6&post_type=news'.'&paged='.$paged); 
    
      while ($wp_query->have_posts()) : $wp_query->the_post(); 
    ?>
    
      <!-- LOOP: Usual Post Template Stuff Here-->
    
    <?php endwhile; ?>
    
    <nav>
        <?php previous_posts_link('&laquo; Newer') ?>
        <?php next_posts_link('Older &raquo;') ?>
    </nav>
    
    <?php 
      $wp_query = null; 
      $wp_query = $temp;  // Reset
    ?>
    

    选项 3 - 使用 WP-pagenavi 插件

    就像另一个选项一样,您可以做的是使用WP-pagenavi 插件,并按照选项#1 设置您的查询。但是,在安装插件后,对代码进行一次更改,删除元素中的所有内容并替换为此功能。所以你会结束:

    <nav>
        <?php wp_pagenavi( array( 'query' => $cpt_query ) ); ?>
    </nav>
    

    【讨论】:

      【解决方案2】:

      我认为您将&lt;?php wp_reset_query(); ?&gt; 放在了错误的位置.. 它不应该是下一个还是分页代码之后?

      类似的东西

      <?php endwhile; ?>
      <?php else: ?>
      <?php wp_reset_query(); ?>
      

      【讨论】:

      • 对。我把它放在 div 导航之后。现在可以了。谢谢!
      • 哇!这不正是我告诉你的有问题吗?
      【解决方案3】:

      @Trevor 非常充分地回答了这个问题,但我需要实现编号分页,还有更多的研究要做。我希望我的代码可以帮助其他人实现编号分页。

          <div class="frontpage-posts">
              <?php
              if (get_query_var('paged')) {
                $paged = get_query_var('paged');
              } elseif (get_query_var('page')) {
                $paged = get_query_var('page');
              } else {
                $paged = 1;
              }
              $temp = $wp_query;
              $wp_query = null;
              $wp_query = new WP_Query('posts_per_page=12&paged=' . $paged);
              if ($wp_query->have_posts()) :
                while ($wp_query->have_posts()) : $wp_query->the_post();
                  echo the_title();
                endwhile; ?>
                <nav>
                  <?php
                  the_posts_pagination(array(
                    'mid_size'  => 2,
                    'prev_text' => __('Back', 'textdomain'),
                    'next_text' => __('Onward', 'textdomain'),
                  ));
                  ?>
                </nav>
              <?php
                $wp_query = null;
                $wp_query = $temp;
                wp_reset_postdata();
              endif;
              ?>
            </div>
      

      【讨论】:

        【解决方案4】:
        $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
        $args = array(
            'post_type'     => 'wp-rest-api-log',
            'posts_per_page' => 5,
            'paged'         => $paged,
            'orderby'       => 'date',
        );
        
        $loop = new WP_Query( $args );
        
        if ($loop->have_posts()) :
            while ($loop->have_posts()) : $loop->the_post();
              echo the_title();
            endwhile;
            
            echo "<nav class=\"sw-pagination\">";
            $big = 999999999; // need an unlikely integer
            echo paginate_links( array(
                'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
                'format' => '?paged=%#%',
                'current' => max( 1, get_query_var('paged') ),
                'total' => $loop->max_num_pages
            ) );
            echo "</nav>";
        endif;
        
        wp_reset_query();
        

        【讨论】:

          【解决方案5】:
          <?php    
          add_shortcode('show_all_news', 'show_all_news');
              function show_all_news($atts) {
                  $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
                  $limit = 4;
                  $offset = ( $limit * $paged ) - $limit;
                  $atts['pages'] = $paged; 
                  $atts['post-type'] = 'your_custom_post_type'; 
                  $atts['orderby'] = 'date'; 
                  $atts['order'] = 'DESC';
                  $atts['offset'] = $offset; 
                  $atts['posts_per_page'] = $limit; 
                  $atts['caller_get_posts'] = 1; 
          
                  $result = new WP_Query($atts);
                  echo '<div class="news-cont">';  
                  if($result->have_posts())
                  {
                      while ($result->have_posts()) : $result->the_post(); 
                          echo '<div class="bg-white news-block">'; 
                          echo '<em class="date">'. get_the_date().'</em>' ?>
          
                          <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
                          <?php 
                          echo "<p>";
                          the_excerpt(); 
                          echo "</p>";
                          echo '</div>';
                      endwhile;
          
                      ?>
                          <ul class="pagination" style="width:100%;">
                              <li id="previous-posts" style="float:left">
                                  <?php previous_posts_link( '<< Vorige Pagina', $result->max_num_pages ); ?>
                              </li>
                              <li id="next-posts" style="float:right">
                                  <?php next_posts_link( 'Volgende Pagina >>', $result->max_num_pages ); ?>
                              </li>
                          </ul>
                      <?php 
          
                  }
                  echo '</div>'; 
                  wp_reset_query();
              }
          

          【讨论】:

          • suraj sing,您想通过更新添加一些您在答案中解决的细节吗?
          • 这是一个工作代码只需更改帖子类型............添加您的自定义帖子类型并将此代码添加到 functions.php 和 do_shortcode('shortcodename ');在您需要分页的类别列表页面中......这将起作用
          • @surajsingh,在这种情况下,涉及短代码是不推荐或根本不需要的。此外,您没有提供任何有关解释您的解决方案的信息。谢谢。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多