WordPress修改固定链接结构:将博客分页URL从/blog/2改为/blog/page/2
解决方案
问题说明
paginate_links过滤器传入的$link是已生成的分页URL字符串,不是包含base、format属性的参数数组,所以你无法通过该参数直接修改分页结构- var_dump无输出大概率是
!is_front_page() && is_home()的判断条件未匹配到对应页面,或者你的主题分页输出未调用WordPress原生paginate_links函数
实现代码(直接加入主题functions.php即可)
以下代码不需要修改htaccess、不需要服务器权限,仅通过主题函数配置即可完成需求,同时兼容旧链接自动跳转,避免出现404或重复内容问题:
// 添加博客分页重写规则+旧链接301跳转 function custom_blog_pagination_rewrite() { // 注册新分页格式的重写规则 add_rewrite_rule( '^blog/page/([0-9]+)/?$', 'index.php?paged=$matches[1]', 'top' ); // 旧格式链接自动跳转到新格式 if ( preg_match( '/^blog\/([0-9]+)\/?$/', $_SERVER['REQUEST_URI'], $matches ) ) { wp_redirect( home_url( '/blog/page/' . $matches[1] . '/' ), 301 ); exit; } } add_action( 'init', 'custom_blog_pagination_rewrite' ); // 统一修改所有分页输出的链接格式 function filter_paginate_links_output( $link ) { return preg_replace( '/\/blog\/([0-9]+)\//', '/blog/page/$1/', $link ); } add_filter( 'paginate_links', 'filter_paginate_links_output', 99, 1 ); // 适配原生分页参数,从根源生成正确格式的链接(兼容WordPress 5.5及以上版本) function custom_pagination_args( $args ) { if ( is_home() && !is_front_page() ) { $args['format'] = 'page/%#%/'; $args['base'] = home_url( '/blog/%_%' ); } return $args; } add_filter( 'paginate_links_args', 'custom_pagination_args', 10, 1 );
生效操作
代码添加完成后,进入WordPress后台→设置→固定链接,直接点击「保存设置」即可,不需要修改现有固定链接配置,操作后重写规则就会正式生效。
内容的提问来源于stack exchange,提问作者Benjamin
相关产品推荐
相关产品推荐

