WordPress paginate_links点击下一页返回相同10条事件内容
问题原因与解决方案
核心问题
分页失效源于两个关键问题:
- 自定义
WP_Query未传入当前页码参数,导致每次查询都只返回第一页内容 paginate_links()默认依赖全局主查询的分页数据,未与你的event自定义文章查询关联
修复步骤
1. 给WP_Query添加页码参数
在查询参数中加入paged,获取当前页面的页码值:
// 获取当前页码,首页默认1 $paged = get_query_var('paged') ? get_query_var('paged') : 1; $wp_query = new WP_Query(array( 'post_type' => 'event', 'meta_key' => 'event_date', 'orderby' => 'meta_value_num', 'order' => 'ASC', 'nopaging' => false, 'paged' => $paged, // 新增页码参数 'meta_query' => array( array( 'key' => 'event_date', 'compare' => '>=', 'value' => $today, 'type' => 'numeric' ) ) ));
2. 让paginate_links关联自定义查询
修改paginate_links()的参数,传入自定义查询的总页数和当前页码,确保分页逻辑与event查询匹配:
echo paginate_links(array( 'prev_text' => '<span>« Previous</span>', 'next_text' => '<span>Next »</span>', 'total' => $wp_query->max_num_pages, // 自定义查询的总页数 'current' => $paged, // 当前页码 'base' => get_pagenum_link(1) . '%_%', // 确保链接格式正确,避免参数丢失 ));
3. 可选:避免覆盖全局$wp_query
建议改用自定义变量名(比如$event_query),防止与主查询冲突:
// 替换全局$wp_query为自定义变量 $event_query = new WP_Query(array(...)); while($event_query->have_posts()) { $event_query->the_post(); // 循环内容保持不变 } // 重置查询,恢复全局post数据 wp_reset_postdata(); echo paginate_links(array( // 其他参数 'total' => $event_query->max_num_pages, 'current' => $paged, ));
完整修复后的代码
<?php $today = date('Ymd'); // 获取当前页码 $paged = get_query_var('paged') ? get_query_var('paged') : 1; // 自定义查询,避免覆盖全局$wp_query $event_query = new WP_Query(array( 'post_type' => 'event', 'meta_key' => 'event_date', 'orderby' => 'meta_value_num', 'order' => 'ASC', 'nopaging' => false, 'paged' => $paged, 'meta_query' => array( array( 'key' => 'event_date', 'compare' => '>=', 'value' => $today, 'type' => 'numeric' ) ) )); while($event_query->have_posts()) { $event_query->the_post(); ?> <div class="event-summary"> <a class="event-summary__date" href="<?php the_permalink(); ?>"> <span class="event-summary__day"><?php $eventDate = new DateTime(get_field('event_date')); echo $eventDate->format('d') ?></span> <span class="event-summary__month"><?php echo $eventDate->format('M') ?></span> <span class="event-summary__year"><?php echo $eventDate->format('Y') ?></span> </a> <div class="event-summary__content"> <h5 class="event-summary__title headline headline--tiny"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h5> <p class="event-summary__excerpt"><?php if (has_excerpt()) { echo get_the_excerpt(); } else { echo wp_trim_words(get_the_content(), 18); } ?> <a href="<?php the_permalink(); ?>" class="">Læs mere</a></p> </div> </div> <?php } // 重置查询,恢复全局post数据 wp_reset_postdata(); echo paginate_links(array( 'prev_text' => '<span>« Previous</span>', 'next_text' => '<span>Next »</span>', 'total' => $event_query->max_num_pages, 'current' => $paged, 'base' => get_pagenum_link(1) . '%_%' )); ?>
内容的提问来源于stack exchange,提问作者jna
相关产品推荐
相关产品推荐

