You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 11:36:01