为什么 woocommerce_checkout_update_order_review 挂钩会给出之前的运费总额?

问题描述 投票:0回答:1

我一直在尝试通过执行 WC()->cart->get_shipping_total() 在操作挂钩“woocommerce_checkout_update_order_review”中获取最新的运费信息,但它似乎包含之前的运费总额,而不是当前的运费总额。仅当用户删除字段信息并重新输入时,运输总价值才看起来是“当前”值。我需要运费总额来进行稍后的计算。

我尝试了多种不同的方式来获取最新的运输总量信息:

  1. 我尝试使用以下代码,但通知和电子邮件中的运费总额始终是之前的运费总额:
function wp_kama_woocommerce_checkout_update_order_review_action( $post_data )
{
    wc_add_notice(WC()->cart->get_shipping_total(), 'notice');
    mail("[email protected]", "shipping total", WC()->cart->get_shipping_total() );
}
add_action( 'woocommerce_checkout_update_order_review', 'wp_kama_woocommerce_checkout_update_order_review_action' );
  1. 我尝试使用以下代码来获取当前的送货方式,但送货方式始终是之前选择的送货方式:
function wp_kama_woocommerce_checkout_update_order_review_action( $post_data )
{
    wc_add_notice(print_r($_POST, true), 'notice');
    mail("[email protected]", "shipping total", print_r($_POST, true) );
}
add_action( 'woocommerce_checkout_update_order_review', 'wp_kama_woocommerce_checkout_update_order_review_action' );
  1. 我尝试使用以下代码来获取当前的送货方式,但同样,它始终是选择的以前的送货方式:
function wp_kama_woocommerce_checkout_update_order_review_action( $post_data )
{
    parse_str( $post_data, $post_data );
    wc_add_notice($post_data, 'notice');
    mail("[email protected]", "shipping total", print_r( $post_data, true ) );

}
add_action( 'woocommerce_checkout_update_order_review', 'wp_kama_woocommerce_checkout_update_order_review_action' );

This stackoverflow 帖子有类似的经历,但他们能够通过操作挂钩“woocommerce_checkout_update_order_review”提供的参数变量访问数据,但该变量中的运输方法似乎不是前面所述的当前值。

php ajax woocommerce hook-woocommerce shipping-method
1个回答
2
投票

由于

woocommerce_checkout_update_order_review
在结帐 Ajax 事件之前触发,因此您可以获得之前的运费总额。

相反,您可以使用以下挂钩之一:

  • woocommerce_review_order_before_shipping
  • woocommerce_review_order_after_shipping
  • woocommerce_review_order_before_order_total
  • woocommerce_review_order_after_order_total

所以你的代码将是例如:

add_action( 'woocommerce_review_order_after_shipping', 'action_wc_review_order_after_shipping' );
function action_wc_review_order_after_shipping() {
     wc_add_notice( 'Shipping total: ' . WC()->cart->get_shipping_total(), 'notice');
}

© www.soinside.com 2019 - 2024. All rights reserved.