问题说明
账单地址(Billing)选择国家后省份联动正常,收货地址(Shipping)选择国家后省份不联动或出现必填错误。
仅在 yith-proteo/dy-proteo 主题下发生,切换其它主题正常。
根因定位
yith-proteo 父主题在前端对站点所有可见 select 统一执行 SelectWoo/Select2 增强(带搜索),并在
updated_checkout等事件下重复初始化。WooCommerce Blocks 的结算页由 React 控制表单;当 Shipping 国家下拉被强制增强时,Blocks 对省份控件类型(下拉/输入框)与必填判定被打断,导致联动与校验失效。
父主题相关入口(供参考):
增强注册与初始化:
wp-content/themes/yith-proteo/inc/scripts.php、wp-content/themes/yith-proteo/js/theme.js
解决方案(最简且稳定)
在子主题 dy-proteo 中,仅对结算页移除父主题的前端增强脚本
yith-proteo-themejs,让 Woo 官方联动逻辑接管。不修改 WordPress 核心或任何插件,不改父主题文件。
子主题代码位置:
文件:
wp-content/themes/dy-proteo/functions.php
示例代码(已实现):
// 结算页禁用父主题 select2 增强 — 开始
add_action( 'wp_print_scripts', function(){
if ( function_exists('is_checkout') && is_checkout() ) {
wp_dequeue_script( 'yith-proteo-themejs' );
}
}, 100 );
// 结算页禁用父主题 select2 增强 — 结束验证步骤
在结算页切换 Shipping 国家(United States / Germany / China),省份/州出现对应下拉选项。
切换到无州省的国家(Singapore / Ethiopia 等),省份显示输入框且不再报错。
Billing 与 Shipping 的联动与校验一致,页面加载正常。
注意事项
该修复仅作用于结算页,避免影响站点其它页面的 select 样式。
若浏览器扩展注入自动填充浮层(出现
insertBefore报错),与站点逻辑无关;可用隐私模式或禁用扩展验证。
结论
根本原因是父主题对收货地址国家下拉的强制增强。
仅保留“结算页禁用
yith-proteo-themejs”的处理,即可恢复 WooCommerce 官方联动;不需要任何额外脚本或复杂兼容。
