修改WordPress分页URL为瑞典语后店铺页面无产品显示求助
问题描述
我搭建了瑞典语的WordPress/WooCommerce站点,遇到URL语言不一致的问题:所有页面标题都是瑞典语,但产品分类分页时,链接里的分页标识是英文的page而非瑞典语的sida(期望URL:https://mydomain/categori/sida/2/,实际显示https://mydomain/categori/page/2/)。
我尝试了以下代码修复:
function re_rewrite_rules() { global $wp_rewrite; $wp_rewrite->pagination_base = 'sida'; if ( ! get_option('my_re_rewrite_rules_flushed', false) ) { $wp_rewrite->flush_rules(); update_option( 'my_re_rewrite_rules_flushed', time()); } } add_action('init', 're_rewrite_rules');
这段代码解决了分类页面的问题,但店铺页面(URL:https://mydomain/butik/)点击分页后,URL变成https://mydomain/butik/sida/2,页面只保留框架元素,没有产品内容。请问该怎么修改代码?
解决方案
问题核心是:你修改了WordPress全局的pagination_base,但WooCommerce的店铺页面(产品归档页)有独立的重写规则和查询逻辑,没有同步适配新的sida分页标识,导致WordPress无法正确识别分页参数,进而无法加载产品数据。
可以用以下两种方式修复:
方法一:全局替换+适配WooCommerce查询
这种方法保持全局分页基址为sida,同时修复WooCommerce店铺页面的参数解析:
// 设置全局分页基址为瑞典语"sida" function set_custom_pagination_base() { global $wp_rewrite; $wp_rewrite->pagination_base = 'sida'; } add_action('init', 'set_custom_pagination_base'); // 修复WooCommerce店铺页面的分页参数映射 function fix_shop_pagination_query($query) { if ( ! is_admin() && $query->is_main_query() && is_shop() ) { // 把URL中的"sida"参数映射到WordPress的"paged"查询参数 if ( isset($query->query_vars['sida']) && is_numeric($query->query_vars['sida']) ) { $query->set('paged', $query->query_vars['sida']); unset($query->query_vars['sida']); } } } add_action('pre_get_posts', 'fix_shop_pagination_query'); // 仅首次加载时刷新重写规则,避免重复执行 function flush_rewrite_once() { if ( ! get_option('custom_pagination_flushed', false) ) { global $wp_rewrite; $wp_rewrite->flush_rules(); update_option('custom_pagination_flushed', time()); } } add_action('admin_init', 'flush_rewrite_once');
方法二:单独适配WooCommerce分页链接
如果不想修改全局分页规则,也可以只针对WooCommerce的分页链接替换标识,同时确保重写规则同步:
// 修改WooCommerce分页链接的格式和基址 function custom_wc_pagination_args($args) { $args['base'] = str_replace('page/', 'sida/', $args['base']); $args['format'] = 'sida/%#%/'; return $args; } add_filter('woocommerce_pagination_args', 'custom_wc_pagination_args'); // 首次加载时刷新重写规则 function flush_wc_rewrite_rules() { if ( ! get_option('wc_pagination_flushed', false) ) { flush_rewrite_rules(); update_option('wc_pagination_flushed', time()); } } add_action('init', 'flush_wc_rewrite_rules');
操作注意事项
- 将代码添加到主题的
functions.php或自定义代码插件中。 - 后台进入设置→固定链接,直接点击「保存更改」,手动刷新重写规则(这一步很关键,确保新规则生效)。
- 测试店铺分页链接,确认URL显示
/butik/sida/2/且产品正常加载。
内容的提问来源于stack exchange,提问作者user18427519
相关产品推荐
相关产品推荐

