求助:WordPress自定义页面短代码分页URL静态化(.htaccess规则)
解决方案
1. 修正.htaccess重写规则
你现有规则存在两个关键问题:一是.htaccess中RewriteRule的路径为相对根目录,开头不能加/;二是仅做了静态到动态的内部重写,未处理动态URL到静态URL的SEO友好跳转。将以下规则放在WordPress默认规则区块之前:
RewriteEngine On # 动态URL跳转至静态URL(SEO重定向) RewriteCond %{QUERY_STRING} ^product-page=(\d+)$ RewriteRule ^(.*)$ /$1/page/%1? [R=301,L] # 静态URL内部解析为动态参数 RewriteRule ^(.*)/page/(\d+)$ $1/?product-page=$2 [L]
注意:确保规则放在# BEGIN WordPress之前,避免被WordPress默认规则覆盖。
2. 修改短代码的分页链接输出
仅靠.htaccess只能处理跳转,但短代码生成的分页链接仍会携带?product-page=参数,需修改短代码的分页逻辑,让它生成静态路径的链接:
自定义短代码场景
找到短代码函数中生成分页链接的部分,替换为以下逻辑:
$current_page = get_query_var('product-page') ?: 1; $total_pages = $your_product_query->max_num_pages; if ($total_pages > 1) { $pagination = '<div class="pagination">'; // 上一页链接 if ($current_page > 1) { $prev_url = trailingslashit(get_permalink()) . 'page/' . ($current_page - 1); $pagination .= '<a href="' . esc_url($prev_url) . '">上一页</a>'; } // 页码链接 for ($i = 1; $i <= $total_pages; $i++) { $page_url = trailingslashit(get_permalink()) . 'page/' . $i; $active_class = $i == $current_page ? 'class="active"' : ''; $pagination .= '<a ' . $active_class . ' href="' . esc_url($page_url) . '">' . $i . '</a>'; } // 下一页链接 if ($current_page < $total_pages) { $next_url = trailingslashit(get_permalink()) . 'page/' . ($current_page + 1); $pagination .= '<a href="' . esc_url($next_url) . '">下一页</a>'; } $pagination .= '</div>'; echo $pagination; }
第三方插件短代码场景(以WooCommerce为例)
使用过滤器修改分页链接输出:
add_filter('woocommerce_pagination_args', 'custom_static_pagination'); function custom_static_pagination($args) { $current_page = get_query_var('product-page') ?: 1; $args['base'] = trailingslashit(get_permalink()) . 'page/%#%/'; $args['format'] = ''; $args['current'] = $current_page; return $args; }
3. 刷新固定链接缓存
完成上述修改后,进入WordPress后台「设置→固定链接」,无需修改配置,直接点击「保存更改」,刷新WordPress重写规则缓存。
内容的提问来源于stack exchange,提问作者Nikolay Petrov
相关产品推荐
相关产品推荐

