如何解决WooCommerce商品归档页修改分页基础slug不生效问题
问题原因
- WooCommerce的商品归档(即商店页)属于自定义文章类型归档,它的重写规则由WooCommerce单独注册,优先级高于WordPress全局的
pagination_base配置,所以你直接修改全局分页基址的代码只会对原生文章分页生效,无法覆盖WooCommerce商店页的规则。
修复方案
你需要额外添加WooCommerce专属的重写规则和链接修正逻辑,完整可用代码如下:
// 修改全局分页基址(保留你原有逻辑) function custom_global_pagination_base() { global $wp_rewrite; $wp_rewrite->pagination_base = 'strana'; } add_action('init', 'custom_global_pagination_base'); // 新增WooCommerce商店页分页重写规则 function custom_woo_pagination_rewrite_rules($rules) { $shop_page_id = wc_get_page_id('shop'); $shop_page = get_post($shop_page_id); if ($shop_page && $shop_page->post_name) { $shop_slug = $shop_page->post_name; $new_rules = array( $shop_slug . '/strana/([0-9]+)/?$' => 'index.php?pagename=' . $shop_slug . '&paged=$matches[1]', $shop_slug . '/strana/([0-9]+)/feed/(feed|rdf|rss|rss2|atom)/?$' => 'index.php?pagename=' . $shop_slug . '&paged=$matches[1]&feed=$matches[2]' ); // 新规则插在原有规则前保证优先级 $rules = $new_rules + $rules; } return $rules; } add_filter('rewrite_rules_array', 'custom_woo_pagination_rewrite_rules'); // 修正前端输出的WooCommerce分页链接结构 function custom_woo_pagination_link($link) { if (is_shop() || is_product_category() || is_product_tag()) { $link = str_replace('/page/', '/strana/', $link); } return $link; } add_filter('paginate_links', 'custom_woo_pagination_link');
生效操作
将上述代码添加到你主题的functions.php文件或者自定义功能插件中后,执行任意一项操作即可生效:
- 进入WordPress后台→设置→固定链接,直接点击「保存更改」,无需修改任何参数
- 单次调用
flush_rewrite_rules()刷新规则(不要把这段代码常驻,仅执行一次即可,避免性能损耗)
该方案同时兼容商店页、商品分类页、商品标签页的分页slug修改,不会影响原生文章、页面的分页规则。
内容的提问来源于stack exchange,提问作者quarky
相关产品推荐
相关产品推荐

