WooCommerce地理定位后调用函数异常:WOOCS URL货币参数问题
解决方案:调整代码执行时机以匹配WOOCS地理定位逻辑
问题根源
你的推测完全正确:当前代码绑定的template_redirect钩子执行时机早于WOOCS的地理定位货币设置流程,导致部分地区(如巴西)获取的是插件初始货币值,而非地理定位匹配后的最终货币。
修复步骤
1. 切换到WOOCS专属钩子触发代码
WOOCS内置了woocs_after_set_currency动作钩子,该钩子会在地理定位完成、当前货币完全确定后触发,能精准解决执行时机不匹配的问题。
2. 优化URL与重定向逻辑
替换直接调用$_SERVER的不安全写法,改用WordPress原生函数处理URL,同时增加货币一致性检查,避免不必要的重定向循环。
修改后的完整代码
function agregar_moneda_a_url() { global $WOOCS; // 仅在/prices/页面执行(对应slug为precios) if (!is_page('precios')) { return; } // 获取当前页面的基础URL(不含查询参数) global $wp; $current_url = home_url(add_query_arg(array(), $wp->request)); // 获取当前URL的查询参数 $current_params = $_GET; // 如果URL已包含currency参数且与当前货币一致,直接返回 if (isset($current_params['currency']) && $current_params['currency'] === $WOOCS->current_currency) { return; } // 构建新URL,添加/更新currency参数 $new_url = add_query_arg('currency', $WOOCS->current_currency, $current_url); // 执行临时重定向(符合地理定位动态切换的场景) wp_redirect($new_url, 302); exit; } // 绑定WOOCS专属钩子,确保在货币设置完成后执行 add_action('woocs_after_set_currency', 'agregar_moneda_a_url');
额外说明
- 选择302临时重定向:地理定位是动态判断的,临时重定向不会让浏览器缓存旧的货币参数,适配不同地区用户的访问场景。
- 一致性检查:新增的参数匹配判断可以避免重复重定向,防止性能损耗或浏览器报错。
内容的提问来源于stack exchange,提问作者Marito
相关产品推荐
相关产品推荐

