WooCommerce 问题 calculate_shipping 被调用了 2 次
WooCommerce problems calculate_shipping is called 2 times
我在计算 WooCommerce 中的交付变体时遇到问题。在结帐页面上,我有一个输入地址的字段,并使用 jQuery 和特殊的 api 服务计算城市代码。接下来,向我的 Web 服务发送一个请求,该服务显示所选城市的送货选项。
大多数情况下,这种情况不会中断,但有时不会为同一个城市计算送货选项。我追踪了我的运送方法的 calculate_shipping 函数中发生的事情,结果有时它会因为我不明白的原因被调用 2 次。也就是说,它们会同时调用,并且第一次收到传递选项的 Null 响应时,下一个请求会生成所需的选项。
但 WooCommerce 仅获取第一个 Null 响应并显示一条消息,指出没有可用的选项。如果我刷新页面,选项会正确显示。我还注意到第一次调用calculate_shipping是为了之前的城市代码,也就是在地址为changed.How之前确定并修复了调用calculate_shipping的原因2有时在某些情况下?下面是我的 calculate_shipping 方法的代码。
public function calculate_shipping( $package = array() ) {
$to_postcode = !empty($package['destination']['postcode']) ? $package['destination']['postcode'] : '000000';
$dimensions = $this->set_package($package);
$delivery_fias_code = $package['destination']['fias_code'];
$delivery_params = [
'aoguid' => $delivery_fias_code,
'postalcode' => empty($delivery_fias_code) ? $to_postcode : '000000',
'weight' => $dimensions['weight'],
'width' => $dimensions['width'],
'length' => $dimensions['length'],
'height' => $dimensions['height'],
'declared' => $package['cart_subtotal'],
'topay' => 0,
'showmode' => 0,
'owner_id' => 55688//get_option('wcopt_login')
];
$deliveryVariants = null;
$deliveryVariants = $this->get_delivery_variants($delivery_params);
if ($deliveryVariants)
$deliveryVariants = json_decode($deliveryVariants, 1);
if ($deliveryVariants != null) {
foreach ($deliveryVariants as $deliveryVariant) {
$this->add_rate(
array(
'id' => $deliveryVariant['Tariff_id'],
'label' => !($deliveryVariant['MinDays'] == $deliveryVariant['MaxDays']) ? $deliveryVariant['TariffName'] . ' (от ' . $deliveryVariant['MinDays'] . ' до ' . $deliveryVariant['MaxDays'] . ' дней)' : $deliveryVariant['TariffName'] . ' (' . $deliveryVariant['MinDays'] . ' дней)',
'cost' => $deliveryVariant['Cost'] + $deliveryVariant['Insurance'],
'package' => $package,
'meta_data' => array(
'tariff_id' => $deliveryVariant['Tariff_id'],
'DeliveryMode' => $deliveryVariant['DeliveryMode']
),
)
);
}
}
}
我禁用了 WooCommerce 在地址字段更改时自动更新送货方式,并且仅在通过我的方法调用时保留更新。我使用了下面的代码:
var $checkout_form = $( 'form.checkout' );
$checkout_form.on( 'change', '.address-field select', function(e){
e.stopImmediatePropagation();
});
$checkout_form.on( 'change', '.address-field input.input-text, .update_totals_on_change input.input-text', function(e){
e.stopImmediatePropagation();
});
$checkout_form.on( 'keydown', '.address-field input.input-text, .update_totals_on_change input.input-text', function(e){
e.stopImmediatePropagation();
});
我在计算 WooCommerce 中的交付变体时遇到问题。在结帐页面上,我有一个输入地址的字段,并使用 jQuery 和特殊的 api 服务计算城市代码。接下来,向我的 Web 服务发送一个请求,该服务显示所选城市的送货选项。
大多数情况下,这种情况不会中断,但有时不会为同一个城市计算送货选项。我追踪了我的运送方法的 calculate_shipping 函数中发生的事情,结果有时它会因为我不明白的原因被调用 2 次。也就是说,它们会同时调用,并且第一次收到传递选项的 Null 响应时,下一个请求会生成所需的选项。
但 WooCommerce 仅获取第一个 Null 响应并显示一条消息,指出没有可用的选项。如果我刷新页面,选项会正确显示。我还注意到第一次调用calculate_shipping是为了之前的城市代码,也就是在地址为changed.How之前确定并修复了调用calculate_shipping的原因2有时在某些情况下?下面是我的 calculate_shipping 方法的代码。
public function calculate_shipping( $package = array() ) {
$to_postcode = !empty($package['destination']['postcode']) ? $package['destination']['postcode'] : '000000';
$dimensions = $this->set_package($package);
$delivery_fias_code = $package['destination']['fias_code'];
$delivery_params = [
'aoguid' => $delivery_fias_code,
'postalcode' => empty($delivery_fias_code) ? $to_postcode : '000000',
'weight' => $dimensions['weight'],
'width' => $dimensions['width'],
'length' => $dimensions['length'],
'height' => $dimensions['height'],
'declared' => $package['cart_subtotal'],
'topay' => 0,
'showmode' => 0,
'owner_id' => 55688//get_option('wcopt_login')
];
$deliveryVariants = null;
$deliveryVariants = $this->get_delivery_variants($delivery_params);
if ($deliveryVariants)
$deliveryVariants = json_decode($deliveryVariants, 1);
if ($deliveryVariants != null) {
foreach ($deliveryVariants as $deliveryVariant) {
$this->add_rate(
array(
'id' => $deliveryVariant['Tariff_id'],
'label' => !($deliveryVariant['MinDays'] == $deliveryVariant['MaxDays']) ? $deliveryVariant['TariffName'] . ' (от ' . $deliveryVariant['MinDays'] . ' до ' . $deliveryVariant['MaxDays'] . ' дней)' : $deliveryVariant['TariffName'] . ' (' . $deliveryVariant['MinDays'] . ' дней)',
'cost' => $deliveryVariant['Cost'] + $deliveryVariant['Insurance'],
'package' => $package,
'meta_data' => array(
'tariff_id' => $deliveryVariant['Tariff_id'],
'DeliveryMode' => $deliveryVariant['DeliveryMode']
),
)
);
}
}
}
我禁用了 WooCommerce 在地址字段更改时自动更新送货方式,并且仅在通过我的方法调用时保留更新。我使用了下面的代码:
var $checkout_form = $( 'form.checkout' );
$checkout_form.on( 'change', '.address-field select', function(e){
e.stopImmediatePropagation();
});
$checkout_form.on( 'change', '.address-field input.input-text, .update_totals_on_change input.input-text', function(e){
e.stopImmediatePropagation();
});
$checkout_form.on( 'keydown', '.address-field input.input-text, .update_totals_on_change input.input-text', function(e){
e.stopImmediatePropagation();
});