WordPress分页不起作用,有什么好主意吗?

时间:2018-10-08 作者:lukepnnngtn

所以我一直在研究分页不起作用的原因,但我什么也找不到。当它转到第2页时,它只显示与第一页相同的内容。还有其他想法吗?

    <?php  global $paged; get_template_part( \'template-parts/header\'); 
    if ( $total > 1 )  {
         // get the current page
         if ( !$current_page = get_query_var(\'paged\') )
              $current_page = 1;
         // structure of "format" depends on whether we\'re using pretty permalinks
         if( get_option(\'permalink_structure\') ) {
             $format = \'?paged=%#%\';
         }
         }
     ?>
<div class="blog-inner">
      <div class="grid-container">
        <div class="grid-x">
          <div class="large-8 column">
            <?php
              if ( get_query_var(\'paged\') ) {
                 $paged = get_query_var(\'paged\');
                } elseif ( get_query_var(\'page\') ) {
                 $paged = get_query_var(\'page\');
                } else {
                 $paged = 1;
                }

              $blogs = array(
                \'post_type\'      => \'post\',
                \'order\'      => \'DESC\',
                \'posts_per_page\' =>  3,
                \'paged\'      => $paged
              );

              $blog_posts = new WP_Query($blogs); ?>
            <?php if ( $blog_posts->have_posts() ) : while ( $blog_posts->have_posts() ) : $blog_posts->the_post(); ?>
              <div class="blog-post">
                <h4><?php the_title(); ?></h4>
                <div class="byline">

                <p><?php the_excerpt(); ?></p>

                  ?>
                </div>
                <div class="read-all">
                  <a href="<?php the_permalink();?>" class="">Read The Post</a>
                </div>
              </div>
            <?php endwhile; ?>
            <div class="pagination">
              <?php wp_reset_query(); ?>
                  <?php 
                      echo paginate_links( array(
                          \'base\'         => str_replace( 999999999, \'%#%\', esc_url( get_pagenum_link( 999999999 ) ) ),
                          \'total\'        => $blog_posts->max_num_pages,
                          \'current\'      => max( 1, get_query_var( \'paged\' ) ),
                          \'format\'       => \'?paged=%#%\',
                          \'show_all\'     => false,
                          \'type\'         => \'plain\',
                          \'end_size\'     => 2,
                          \'mid_size\'     => 1,
                          \'prev_next\'    => true,
                          \'prev_text\'    => sprintf( \'<i></i> %1$s\', __( \'Newer Posts\', \'text-domain\' ) ),
                          \'next_text\'    => sprintf( \'%1$s <i></i>\', __( \'Older Posts\', \'text-domain\' ) ),
                          \'add_args\'     => false,
                          \'add_fragment\' => \'\',
                      ) );
                  ?>
              </div>

            <?php endif; ?>
          </div>
                </div>
                <?php endwhile; ?>
              </div>
            <?php endif; ?>
          </div>
        </div>
      </div>
    </div>
[一些html被删除,因此一些div可能不匹配]

更多信息:它当前设置为索引。php页面,即使它不是主页。如果你是通过拼写错误的url找到它的,那么它是有效的

1 个回复
最合适的回答,由SO网友:Valentin Genev 整理而成

您好@Lukepnngtn,欢迎光临!为阅读做好准备。

既然你在做index.php 我们需要考虑以下文件中的内容Removing query_posts from the Main Loop 在分页法典中(link):

例如,假设您的主题在主页(index.php)和类别页面(category.php)上像这样查询主循环,并且分页不起作用。。。

您需要做的是删除WP_Query()index.php 在中归档并执行操作function.php. 链接中逐拍地描述了它,但我也会将其粘贴到这里:

function my_post_queries( $query ) {
  // do not alter the query on wp-admin pages and only alter it if it\'s the main query
  if (!is_admin() && $query->is_main_query()){

    // alter the query for the home and category pages 

    if(is_home()){
      $query->set(\'posts_per_page\', 3);
    }

    if(is_category()){
      $query->set(\'posts_per_page\', 3);
    }

  }
}
add_action( \'pre_get_posts\', \'my_post_queries\' );
之后我们需要回到index.php 文件在这一点上,它应该是这样的:

while ( have_posts() ) :
    the_post();

    ...

endwhile;

global $wp_query;

echo paginate_links( array(
    \'base\' => str_replace( 999999999, \'%#%\', esc_url( get_pagenum_link( 999999999 ) ) ),
    \'total\'         => $wp_query->max_num_pages,
    \'current\'       => max( 1, get_query_var(\'paged\') ),
    \'format\'        => \'?paged=%#%\',
    \'show_all\'      => false,
    \'type\'          => \'plain\',
    \'end_size\'      => 2,
    \'mid_size\'      => 1,
    \'prev_next\'     => true,
    \'prev_text\'     => sprintf( \'<i></i> %1$s\', __( \'Newer Posts\', \'text-domain\' ) ),
    \'next_text\'     => sprintf( \'%1$s <i></i>\', __( \'Older Posts\', \'text-domain\' ) ),
    \'add_args\'      => false,
    \'add_fragment\'  => \'\',
) );
我进一步研究了你的代码,我还建议阅读WordPress的文档(get_query_var()):

要获取静态首页(页面模板)上的当前页码,必须使用“page”查询变量。。。

经过进一步研究,我找到了这个答案(link) 关于另一个与WP相关的问题,内容如下:

分页->用于主页、博客页面、归档页面和页面上计算分页。第一页是0,从那里开始,数字对应于页码,用于静态首页和分页的单页。这些页面上的分页工作原理相同,静态首页在分页时被视为单个页面link):

如果静态首页上的分页被破坏,则必须以这种方式添加“paged”参数。。。

所以你在这里做的很好:

if ( get_query_var(\'paged\') ) {
    $paged = get_query_var(\'paged\');
}
elseif ( get_query_var(\'page\') ) {
    $paged = get_query_var(\'page\');
}
else {
    $paged = 1;
}
我在static page 使用自定义模板,直到我创建主页,然后您需要使用$paged 的变量current 中的参数paginate_links() 打电话,像这样:

paginate_links( array(
    ...
    \'current\'       => max( 1, $paged ),
    ...
) );
我仍然不能在评论中提问,所以我希望我能有所帮助。祝你好运

结束

相关推荐

Custom Pagination is Broken

下午好我正在为网站添加分页功能,目前工作正常,但由于某些原因,该功能会加载一个额外的页面。我们有7篇文章,我将其设置为每页显示4篇文章。然而,问题是分页加载了第三个不显示帖子的页面。我只是想知道为什么会这样,我怎么才能解决它?下面是我的意思的一个活生生的例子:http://weightcreative.com/blog http://weightcreative.com/blog/page/2http://weightcreative.com/blog/page/3以下是我的帖子页面中的代码:<?p