WooCommerce配送插件:结账页自定义字段修改后AJAX不更新运费问题
我已搜索了各类解决方案,但均未生效。
我的实现需求如下:
- 在结账页面新增名为Shipping的下拉选择框,选项包含
Preorder和Non-preorder; - 若选择
preorder,则显示对应的Location下拉选择框; - 若选择
non-preorder,则显示同类型的Location下拉选择框,但选项列表与preorder场景不同; - 当Shipping和Location字段均正确填写后,页面应展示正确的配送费用。
遇到的问题
我填完所有必填项以及Shipping、Location字段后,页面会发起AJAX请求,但配送费用不会重新计算,始终保持原值。
但当我修改姓名或街道地址字段时,运费可以正常更新,这是不符合预期的异常行为,会导致用户直接点击Place Order按钮时提交错误的运费数据。
我开发自定义插件的步骤
- 通过hook添加自定义字段,相关代码如下:
public function woocommerce_checkout_fields( $fields ) { // var_dump(have_rows('location', 'option')); // die('test'); $options = []; $options[''] = 'Select Shipping'; $options['pre-order'] = 'Pre Order'; if (!$this->hasPreorderItem()) { $options['non-pre-order'] = 'Non Pre Order'; } // Add custom billing shipping $fields['billing']['billing_shipping'] = array ( 'type' => 'select', 'label' => 'Shipping', 'placeholder' => 'Select shipping', 'class' => array ('address-field', 'update_totals_on_change' ), 'required' => true, 'options' => $options // 'options' => $this->getLocations() ); $fields['billing']['billing_location_pre_order'] = array ( 'type' => 'select', 'label' => 'Location(Pre Order)', 'placeholder' => 'Select Preorder Location', 'class' => array ('address-field', 'update_totals_on_change' ), 'required' => false, 'options' => $this->preorderLocations->getLocations() // 'options' => $this->getLocations() ); // Add custom billing location $fields['billing']['billing_location'] = array ( 'type' => 'select', 'label' => 'Location', 'placeholder' => 'Select location', 'class' => array ('address-field', 'update_totals_on_change' ), 'required' => false, 'options' => $this->locations->getLocations() // 'options' => $this->getLocations() ); return $fields; }
- 编写了辅助类,用于根据Shipping和Location字段的值计算配送费用。
已尝试的解决办法(均无效)
- 参考了StackOverflow的相关回答,未解决问题;
- 将自定义字段设置为必填项,网传只有所有必填项填写完成后才会触发运费更新,但测试后无效;
- 在
wp-config.php中禁用缓存,无效。
恳请有相关开发经验的开发者提供可行的解决方案,十分感谢。
内容的提问来源于stack exchange,提问作者Kenjiro
相关产品推荐
相关产品推荐

