WordPress单页能否同时实现按月份和按页码两种分页功能
WordPress单页同时实现月份+页码分页的解决方法
WordPress完全支持在单页同时实现按月份归档筛选、按页码分页两种功能。你遇到的跳转后无内容加载问题,是因为直接调用无参数的paginate_links()会丢失月份筛选参数,同时默认主查询没有适配自定义reviews文章类型的分页规则导致的,按以下步骤修改即可修复:
步骤1:在主题functions.php中添加查询预处理钩子
这段代码会在主查询执行前自动适配reviews文章类型的分页、月份筛选规则:
add_action('pre_get_posts', 'custom_reviews_archive_query'); function custom_reviews_archive_query($query) { // 仅对前台reviews文章类型的主查询生效 if (!is_admin() && $query->is_main_query() && get_query_var('post_type') == 'reviews') { // 自定义每页显示文章数,可自行调整数值 $query->set('posts_per_page', 10); // 绑定分页参数 $paged = get_query_var('paged') ? get_query_var('paged') : 1; $query->set('paged', $paged); } }
步骤2:修改页面模板中的分页代码
替换你原来的<?echo paginate_links();?>部分,完整页面代码如下:
<?php // 输出月份归档导航 $args = array( 'post_type' => 'reviews', 'type' => 'monthly', 'echo' => 0 ); echo wp_get_archives($args); ?> <div class="row reviews-items"> <?php while (have_posts()) : the_post(); ?> <div class="reviews-item-title"><?php the_title(); ?></div> <div class="reviews-item-text"><?php the_content(); ?> <?php endwhile; ?> </div> <?php // 修复后的分页代码,自动保留月份筛选参数 global $wp_query; $big = 999999999; $paginate_args = 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, // 保留当前月份筛选参数 'add_args' => array( 'm' => get_query_var('m') ) ); echo paginate_links($paginate_args); ?>
注意事项
- 如果你是用自定义页面模板而非
reviews默认归档模板实现的功能,需要在pre_get_posts的判断条件中补充is_page('你的页面别名') - 如果分页跳转后仍然丢失月份参数,可以检查
wp_get_archives生成的链接里的月份参数名,默认参数名为m,如果有自定义修改对应调整add_args里的键名即可 - 不要单独新建
WP_Query实例后直接调用默认分页函数,否则需要将自定义查询的max_num_pages传给分页参数,避免总页数不匹配
内容的提问来源于stack exchange,提问作者Svetlana Kudryavtseva
相关产品推荐
相关产品推荐

