【问题标题】:Change Cart total price in WooCommerce在 WooCommerce 中更改购物车总价
【发布时间】:2017-09-10 23:08:21
【问题描述】:

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

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

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

我从这里获取代码:Change total and tax_total Woocommerce 并以这种方式自定义它:

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 列表,只有与如何创建插件相关的通用文章。

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

【问题讨论】:

  • 你面临数据类型的问题,$wc_price 是字符串,不是浮点数,所以你的算术运算失败了。
  • @Mohsin 你是对的,我认为 woo-commerce 会返回要操作的小计的原始值,但没有意识到它会返回一个字符串。下面的答案以及您的评论有助于我了解为什么我没有得到浮动。谢谢。
  • 太棒了!快乐编码:)

标签: php wordpress woocommerce cart hook-woocommerce


【解决方案1】:

自从 Woocommerce 3.2+ 它不再工作了,新的 Class WC_Cart_Totals ...

新答案:Change Cart total using Hooks in Woocommerce 3.2+


第一个 woocommerce_cart_total 钩子是 filter 钩子,而不是动作钩子。另外,由于 woocommerce_cart_total 中的 wc_price 参数是格式化价格,您将无法将其提高 10%。这就是它返回零的原因。

在 Woocommerce v3.2 之前它的工作原理是一些 WC_Cart properties 可以直接访问

您最好使用挂在 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 文件或任何插件文件中。

也可以在这个钩子中使用WC_cart add_fee()方法,或者像Cristina回答中那样单独使用。

【讨论】:

  • 嗨@LoicTheAztec 这工作得很好。我很感激!
  • 是的。它被接受有助于我找到首先看的解决方案。你确实写出了最好的答案。
【解决方案2】:

这并不能回答这个问题。洛伊克有。这是显示 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' );

【讨论】:

  • 知道了,克里斯蒂娜很有趣,因为这也有助于区分实际总额和他们今天需要支付的首付之间的差额。太棒了!谢谢,为简单起见,我也可以将其合并到代码中。你摇滚
  • Cristina, global $woocommerce$woocommerce->cart 已过时。您必须直接使用$cart 参数对象或WC()->cart
  • 谢谢。更正了新的东西。跟不上。我发现这是调试时没有错误的好时机; -)
  • @Christina嗨,当我在function.php中添加代码时,购物车的整个部分都消失了,你能帮我看看我的woocommerce版本是2.6.14吗
  • 抱歉,我无法为您提供帮助,因为我无法复制该问题。可能想查看开发人员文档,因为它们适用于旧版本。 docs.woocommerce.com/document/…
猜你喜欢
  • 2017-04-06
  • 2021-06-28
  • 1970-01-01
  • 1970-01-01
  • 2014-09-04
  • 2019-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多