WordPress自定义文章类型分页:添加?pag=页码URL参数
解决自定义文章类型Courses的分页URL格式问题
我来一步步帮你搞定这个分页URL的需求,让自定义文章类型的分页既符合你要的格式,又能处理手动输入参数的跳转:
1. 调整查询参数的获取与WP_Query配置
首先我们要把查询逻辑切换到你想要的pag参数上,同时兼容WP_Query的内部分页机制:
<?php // 获取自定义的pag参数,无参数时默认显示第1页 $pag = (get_query_var('pag')) ? get_query_var('pag') : 1; // 把pag的值传给WP_Query的paged属性(WP内部依赖这个参数识别分页) $args = array( 'post_type' => 'courses', 'posts_per_page' => 6, 'paged' => $pag, 'orderby' => 'title', 'order' => 'ASC' ); $courses = new WP_Query($args); if($courses->have_posts()): while($courses->have_posts()): $courses->the_post(); <!-- HTML loop 内容 --> endwhile; ?>
2. 配置paginate_links生成目标URL格式
修改分页链接的生成规则,让它输出/courses/page/3/?pag=3这种格式:
<div class="pagination"> <?php echo paginate_links(array( 'total' => $courses->max_num_pages, // 构造基础URL:先拿到第一页的归档地址,再拼接pag参数模板 'base' => trailingslashit(get_pagenum_link(1)) . '?pag=%#%', 'format' => '', // 因为base已经包含参数格式,这里留空即可 'current' => max(1, $pag), // 使用我们获取的pag值标记当前页码 'prev_text' => '« 上一页', 'next_text' => '下一页 »' )); ?> </div> <?php endif; wp_reset_postdata(); ?>
3. 添加重定向逻辑,处理手动输入参数的情况
要实现用户输入?pag=2时自动跳转到/courses/page/2/?pag=2,需要在主题的functions.php里加一段钩子代码:
add_action('template_redirect', 'courses_pag_redirect'); function courses_pag_redirect() { // 只针对courses自定义文章类型的归档页生效 if (is_post_type_archive('courses')) { $pag = get_query_var('pag'); // 如果pag参数存在且大于1,且当前URL没有page分页结构 if ($pag && $pag > 1 && !is_paged()) { // 构造正确的跳转URL $redirect_url = get_pagenum_link($pag) . '?pag=' . $pag; // 301永久重定向,兼顾SEO wp_redirect($redirect_url, 301); exit; } } }
4. 注册自定义查询参数
最后要让WordPress正确识别pag这个参数,在functions.php里添加参数注册:
add_filter('query_vars', 'register_courses_pag_var'); function register_courses_pag_var($vars) { $vars[] = 'pag'; return $vars; }
把这些修改整合后,你的courses分页就会完全符合需求:分页链接自动生成/courses/page/X/?pag=X格式,用户手动输入?pag=X也会自动跳转到对应的规范分页页面。
内容的提问来源于stack exchange,提问作者Germán Salamanca Viveros
相关产品推荐
相关产品推荐

