在 WooCommerce 中更改购物车总价

Change Cart total price in WooCommerce

我 运行 遇到购物车总数的问题 只显示 0

基本上我要做的是在所有购物车商品都添加到购物车小计之后只接受一定金额的存款总额。

因此,例如,如果客户添加价值 100 美元的商品,他们最初只需支付 10 美元或小计的 (10%) 作为总价值。

我从这里获取代码: 并以这种方式自定义它:

add_action('woocommerce_cart_total', 'calculate_totals', 10, 1);

function calculate_totals($wc_price){
$new_total = ($wc_price*0.10);

return wc_price($new_total);
} 

但启用该代码后总金额显示为 0.00。如果删除代码,我将得到标准总数。

我在 woocommerce 网站上也找不到完整的 api,只有与如何创建插件相关的通用文章。

任何帮助或指向正确方向的观点都会很棒。

Since Woocommerce 3.2+ it does not work anymore with the new Class WC_Cart_Totals ...

New answer: Change Cart total using Hooks in Woocommerce 3.2+


首先 woocommerce_cart_total 挂钩是 filter 挂钩,而不是动作挂钩。此外,由于 wc_price 中的参数 woocommerce_cart_total 格式的价格 ,您将无法增加 10%。这就是为什么它 returns 为零。

Before Woocommerce v3.2 it works as some WC_Cart properties can be accessed directly

你最好使用挂钩在 woocommerce_calculate_totals 动作挂钩中的自定义函数
这样:

// Tested and works for WooCommerce versions 2.6.x, 3.0.x and 3.1.x
add_action( 'woocommerce_calculate_totals', 'action_cart_calculate_totals', 10, 1 );
function action_cart_calculate_totals( $cart_object ) {

    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    if ( !WC()->cart->is_empty() ):
        ## Displayed subtotal (+10%)
        // $cart_object->subtotal *= 1.1;

        ## Displayed TOTAL (+10%)
        // $cart_object->total *= 1.1;

        ## Displayed TOTAL CART CONTENT (+10%)
        $cart_object->cart_contents_total *= 1.1;

    endif;
}

代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件。

Is also possible to use WC_cart add_fee() method in this hook, or use it separately like in Cristina answer.

这并没有回答这个问题。 Loic 的确实如此。这是显示 10% 折扣订单项的另一种方法:

function prefix_add_discount_line( $cart ) {

  $discount = $cart->subtotal * 0.1;

  $cart->add_fee( __( 'Down Payment', 'yourtext-domain' ) , -$discount );

}
add_action( 'woocommerce_cart_calculate_fees', 'prefix_add_discount_line' );