我们正在尝试这种类型的代码更改小计,但我们想根据小计更改总数而不在订单表中添加任何折扣字段。
// define the woocommerce_cart_subtotal callback
function filter_woocommerce_cart_subtotal( $array, $int, $int ) {
// make filter magic happen here...
};
// add the filter
add_filter( 'woocommerce_cart_subtotal', 'filter_woocommerce_cart_subtotal', 10, 3 );
答案 0 :(得分:1)
嗯,你正在使用错误的钩子。该过滤器用于更改显示子总数。
你需要的是:
add_action( 'woocommerce_calculate_totals', 'woocommerce_calculate_totals', 30 );
function woocommerce_calculate_totals( $cart ) {
// make magic happen here...
// use $cart object to set or calculate anything.
if ( 'excl' === $cart->tax_display_cart ) {
$cart->subtotal_ex_tax = 400;
} else {
$cart->subtotal = 350;
}
}
上面的将导致小计显示为350或400,具体取决于您的税收设置,但不管购物车中有哪些产品。因为我们在没有逻辑的情况下设置小计。添加自己的逻辑。
您也可以使用与上述相同的概念来使用woocommerce_after_calculate_totals
。
add_action( 'woocommerce_after_calculate_totals', 'woocommerce_after_calculate_totals', 30 );
function woocommerce_after_calculate_totals( $cart ) {
// make magic happen here...
// use $cart object to set or calculate anything.
if ( 'excl' === $cart->tax_display_cart ) {
$cart->subtotal_ex_tax = 400;
} else {
$cart->subtotal = 350;
}
$cart->total = 50;
}