【问题标题】:Wordpress Pagination wp_queryWordpress 分页 wp_query
【发布时间】:2015-05-21 04:55:24
【问题描述】:

我有一个自定义页面,其中列出了所有类别的所有帖子,我的分页遇到了砖墙!由于某种原因,分页没有显示出来!

这是我的代码

<?php // Template Name: News Feed ?>
<?php get_header(); ?>
<div id="content">
    <div class="container">
        <div class="row">
            <div class="col-md-3">
                <div id="left-sidebar">
                    <?php get_sidebar('posts') ?>
                </div>
            </div>
            <div class="col-md-6">
            <?php
                $args = array(
                    'post_type' => 'post',
                    'orderby'   => 'date',
                    'order'     => 'DESC',
                );
                $my_query = new WP_Query($args);

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

                        <div class="post">
                            <h2><a href="<?php the_permalink(); ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>
                            <small><?php the_time('F jS, Y'); ?> by <?php the_author_posts_link(); ?></small>
                            <div class="entry">
                                <?php the_excerpt(); ?>
                            </div>
                            <p class="postmetadata"><?php _e( 'Posted in' ); ?> <?php the_category( ', ' ); ?></p>
                        </div> 

                    <?php endwhile; ?>

                    <div class="navigation">
                        <div class="alignleft"><?php previous_posts_link('Previous Entries'); ?></div>
                        <div class="alignright"><?php next_posts_link('Next Entries'); ?></div>
                    </div>

            </div>
            <div class="col-md-3">
                <?php get_sidebar(); ?>
            </div>
        </div>
    </div>
</div>
<?php get_footer(); ?>

【问题讨论】:

    标签: php wordpress


    【解决方案1】:
    $paged = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1; // setup pagination
    
        $the_query = new WP_Query( array( 
            'post_type' => 'post',
            'paged' => $paged,
            'posts_per_page' => 5) 
        );
    
        while ( $the_query->have_posts() ) : $the_query->the_post();
            echo '<div>' . get_the_title() . '</div>';
                  the_content();
        endwhile;
    
    
        echo '<nav>';
        echo  '<div>'.get_next_posts_link('Older', $the_query->max_num_pages).'</div>'; //Older Link using max_num_pages
        echo  '<div>'.get_previous_posts_link('Newer', $the_query->max_num_pages).'</div>'; //Newer Link using max_num_pages
        echo "</nav>";
    
    
        wp_reset_postdata(); // Rest Data
    

    你能试试上面的代码吗?

    【讨论】:

      【解决方案2】:

      您已经创建了自定义模板,因此您应该先尝试使用以下链接: https://wordpress.org/support/topic/pagination-not-working-on-custom-template-1

      另外,我请你看一下这个link,它会详细解释一切

      默认情况下,在任何给定的上下文中,WordPress 都使用主查询来确定分页。主查询对象存储在 $wp_query 全局中,也用于输出主查询循环:

       if ( have_posts() ) : while ( have_posts() ) : the_post();
      

      当您使用自定义查询时,您会创建一个完全独立的查询对象:

       $custom_query = new WP_Query( $custom_query_args );
      

      该查询是通过一个完全独立的循环输出的:

      if ( $custom_query->have_posts() ) : 
      while ( $custom_query->have_posts() ) : 
          $custom_query->the_post();
      

      但是分页模板标签,包括 previous_posts_link()、next_posts_link()、posts_nav_link() 和 paginate_links(),它们的输出基于主查询对象 $wp_query。该主要查询可能会或可能不会分页。例如,如果当前上下文是自定义页面模板,则主 $wp_query 对象将仅包含一个帖子 - 自定义页面模板分配到的页面的 ID。

      如果当前上下文是某种归档索引,则主 $wp_query 可能包含足够多的帖子导致分页,这会导致问题的下一部分:对于主 $wp_query 对象,WordPress 将传递一个分页基于分页 URL 查询变量的查询参数。获取查询时,该分页参数将用于确定要返回的分页帖子集。如果单击显示的分页链接并加载下一页,您的自定义查询将无法知道分页已更改。

      https://wordpress.stackexchange.com/questions/120407/how-to-fix-pagination-for-custom-loops

      我希望这对你有用

      【讨论】:

      • 请注意,@ChipBennet 的帖子很棒,但取消主查询仍然是不明智的。 query_posts 所做的几乎完全一样,你永远不应该使用它。
      • @pieter Goosen,完全同意,这就是我发布链接的原因,它解释了为什么以及何时应该使用 query_post 和 wp_query。
      【解决方案3】:

      首先尝试在 $args 中添加 'posts_per_page' 参数,这样循环就会知道要在页面中显示多少帖子。

      第二,来自WordPress Codex:

      如果静态首页上的分页中断,您必须以这种方式添加“paged”>参数:

      <?php 
      if ( get_query_var('paged') ) { $paged = get_query_var('paged'); }
      elseif ( get_query_var('page') ) { $paged = get_query_var('page'); }
      else { $paged = 1; }
      
      query_posts('posts_per_page=3&paged=' . $paged); 
      ?>
      

      这意味着只需在您的 args 之前添加此代码(没有“query_posts”),然后像这样的 args :

      $args = array(
                          'post_type' => 'post',
                          'paged'     => $paged,
                          'orderby'   => 'date',
                          'order'     => 'DESC',
      

      我建议再次探索该法典,也许那里有一些可以帮助您的东西。 http://codex.wordpress.org/Pagination#Example_Loop_with_Pagination

      【讨论】:

      • 不!!!!!!!永远不要使用query_posts,除非你必须打破页面功能,你永远不会想要这样做。请改用WP_Query
      • 另外,您不必设置posts_per_page。如果不设置,会使用默认的get_option( 'posts_per_page' ),里面保存着后台阅读下设置的每页发帖量
      • 这是 WordPress codex 静态页面分页的复制粘贴,但我明白你的意思,这就是为什么我说,“没有“query_posts”:)
      • 好的,很高兴知道我不知道如果未设置这将使用默认值。
      • 法典中的某些页面是一堆废话。问题是,每个在 wordpress.org 上注册的人都可以对其进行更改。只是一个例子,我已经两次更正了子主题页面,并且有人不断更改我的更改。那里描述的添加样式的方式是错误的,它两次加载子主题样式表。因此,请始终注意法典内容
      【解决方案4】:

      您的链接不会显示,因为next_posts_link() 默认设置为主查询 ($wp_query-&gt;max_num_pages) 的 $max_num_pages 参数。在页面上,这将始终是1,默认情况下,只有一页时这些链接不会显示

      此外,您没有对查询进行分页,因此即使您的链接正常工作,您也会看到相同的帖子被重复。

      您应该像这样将paged 参数添加到您的查询中

      $paged = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;
      $args = array(
          'paged' => $paged,
          // Rest of you arguments
      );
      

      然后您需要像这样更改next_posts_link() 中的$max_pages 参数

      next_posts_link( 'Next entries', $my_query->max_num_pages );
      

      【讨论】:

        猜你喜欢
        • 2016-09-29
        • 2023-04-01
        • 2015-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-20
        相关资源
        最近更新 更多