从 WooCommerce 中的订单总额中删除运费总额
Removing shipping total from order total in WooCommerce
我正在尝试从购物车总计中删除运费,我已使用以下代码在 CART 和 CHECKOUT 页面上进行处理。
但是,订单确认页面上的运费没有被删除。
为购物车和结账工作
add_action( 'woocommerce_after_calculate_totals', 'woocommerce_after_calculate_totals', 110 );
function woocommerce_after_calculate_totals( $cart ) {
// make magic happen here...
// use $cart object to set or calculate anything.
## Get The shipping totals
$shipping = WC()->cart->get_shipping_total();
$totalincshipping = $cart->total;
$cart->total = $totalincshipping-$shipping;
}
我在 ORDER CONFIRMATION 页面尝试了以下操作,但这没有给出预期的结果:
add_action( 'woocommerce_checkout_create_order', 'change_total_on_checking', 100, 2 );
function change_total_on_checking( $order ) {
// Get order total
$shipping = $order->get_shipping_total();
$total = $order->get_total();
## -- Make your checking and calculations -- ##
$new_total = $total - "10"; // <== Fake calculation
// Set the new calculated total
$order->set_total( $new_total );
}
有什么建议吗?
您可以只使用 woocommerce_calculated_total
过滤器挂钩,它允许插件过滤总计,并在修改时对购物车总计求和。
// Allow plugins to filter the grand total, and sum the cart totals in case of modifications.
function filter_woocommerce_calculated_total( $total, $cart ) {
// Get shipping total
$shipping_total = $cart->get_shipping_total();
return $total - $shipping_total;
}
add_filter( 'woocommerce_calculated_total', 'filter_woocommerce_calculated_total', 10, 2 );
无需进一步调整或额外代码,因为购物车总数将为 saved/stored 并自动用于其他页面
更新
由于您使用的是 Bayna – Deposits & Partial Payments for WooCommerce 插件,这可能与我的回答有冲突,因为您使用的插件包含相同的过滤器钩子
即在第 15 行版本 1.2.1\deposits-for-woocommerce\src\Cart.php 文件中
add_filter( 'woocommerce_calculated_total', [$this, 'recalculate_price'], 100, 2 );
因此,为了让我的答案代码 运行 在此挂钩之后,将其优先级更改为 100+
在我的答案中替换
add_filter( 'woocommerce_calculated_total', 'filter_woocommerce_calculated_total', 10, 2 );
与
add_filter( 'woocommerce_calculated_total', 'filter_woocommerce_calculated_total', 110, 2 );
学分:Bossman
我正在尝试从购物车总计中删除运费,我已使用以下代码在 CART 和 CHECKOUT 页面上进行处理。
但是,订单确认页面上的运费没有被删除。
为购物车和结账工作
add_action( 'woocommerce_after_calculate_totals', 'woocommerce_after_calculate_totals', 110 );
function woocommerce_after_calculate_totals( $cart ) {
// make magic happen here...
// use $cart object to set or calculate anything.
## Get The shipping totals
$shipping = WC()->cart->get_shipping_total();
$totalincshipping = $cart->total;
$cart->total = $totalincshipping-$shipping;
}
我在 ORDER CONFIRMATION 页面尝试了以下操作,但这没有给出预期的结果:
add_action( 'woocommerce_checkout_create_order', 'change_total_on_checking', 100, 2 );
function change_total_on_checking( $order ) {
// Get order total
$shipping = $order->get_shipping_total();
$total = $order->get_total();
## -- Make your checking and calculations -- ##
$new_total = $total - "10"; // <== Fake calculation
// Set the new calculated total
$order->set_total( $new_total );
}
有什么建议吗?
您可以只使用 woocommerce_calculated_total
过滤器挂钩,它允许插件过滤总计,并在修改时对购物车总计求和。
// Allow plugins to filter the grand total, and sum the cart totals in case of modifications.
function filter_woocommerce_calculated_total( $total, $cart ) {
// Get shipping total
$shipping_total = $cart->get_shipping_total();
return $total - $shipping_total;
}
add_filter( 'woocommerce_calculated_total', 'filter_woocommerce_calculated_total', 10, 2 );
无需进一步调整或额外代码,因为购物车总数将为 saved/stored 并自动用于其他页面
更新
由于您使用的是 Bayna – Deposits & Partial Payments for WooCommerce 插件,这可能与我的回答有冲突,因为您使用的插件包含相同的过滤器钩子
即在第 15 行版本 1.2.1\deposits-for-woocommerce\src\Cart.php 文件中
add_filter( 'woocommerce_calculated_total', [$this, 'recalculate_price'], 100, 2 );
因此,为了让我的答案代码 运行 在此挂钩之后,将其优先级更改为 100+
在我的答案中替换
add_filter( 'woocommerce_calculated_total', 'filter_woocommerce_calculated_total', 10, 2 );
与
add_filter( 'woocommerce_calculated_total', 'filter_woocommerce_calculated_total', 110, 2 );
学分:Bossman