自定义WP_Query分页在第2页后显示404

时间:2017-03-01 12:40:03

标签: wordpress

这是我的index.php循环:

<?php 
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
$query = new WP_Query( array( 'posts_per_page' => 3, 'paged' => $paged ) ); 
?>
<?php if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); ?>
      <article>
        <h3><?php the_title(); ?></h3>
      </article>
<?php endwhile; ?>

<?php if ( get_next_posts_link('Next', $query->max_num_pages)) : ?>
  <nav class="navigation paging-navigation" role="navigation">
    <?php echo get_next_posts_link( 'Next', $query->max_num_pages ); ?>
  </nav>
<?php endif; ?>

  <?php wp_reset_postdata(); ?>

<?php else:  ?>
  <p><?php _e( 'Sorry, no posts matched your criteria.' ); ?></p>
<?php endif; ?>

这很简单,但问题在于分页。在索引页面上,我有链接到第2页,当我点击它时,一切看起来都很好,但是当我在页面/ 2上并点击链接下一页进入页面/ 3我收到404错误。
我做错了什么?

2 个答案:

答案 0 :(得分:1)

我找到了一个解决方案,对index.php来说并不难,但后来我注意到我的tag.php甚至没有显示第2页,所以我在那里做了一些改动以使其工作:

function my_post_count_queries( $query ) {
  if (!is_admin() && $query->is_main_query()){
    if(is_home()){ $query->set('posts_per_page', 1); }
    if(is_tag()){ 
        $query->set('post_type', array( 'product' ) );
        $query->set('posts_per_page', 1);
    }
  }
}
add_action( 'pre_get_posts', 'my_post_count_queries' );

答案 1 :(得分:0)

请尝试在functions.php中添加此代码并再次检查分页

<?php
if ( ! function_exists('my_pagination')) :
    function my_pagination() {
        global $wp_query;

        $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' => $wp_query->max_num_pages
        ) );
    }
endif;

?>

在重置post meta

之前添加此代码
 <div class="blog_pagination">
         <?php my_pagination(); ?>
  </div>

希望这项工作