在 minicart 中显示 Woocommerce 订阅经常性总计

Posted

技术标签:

【中文标题】在 minicart 中显示 Woocommerce 订阅经常性总计【英文标题】:Display Woocommerce Subscription recurring total in minicart 【发布时间】:2017-02-01 01:21:24 【问题描述】:

试图让 Woocommerce 订阅经常性总数显示在迷你购物车中。似乎有一些不同的功能可能有助于实现这一目标,但它们似乎都不是开箱即用的。有什么建议吗?

在几次页面刷新后,回显以下函数最终会显示经常性总计(含增值税):

WC_Subscriptions_Cart::calculate_subscription_totals();

问题是它还将正常的一次性付款小计(不包括增值税)更改为经常性小计(不包括增值税)。正常小计与 WC()->cart->get_cart_subtotal() 相呼应。

这些是其他经常性的总相关函数,可能有助于解决这个问题:

WC_Subscriptions_Cart::get_recurring_cart_contents_total();
WC_Subscriptions_Cart::display_recurring_totals();

如果有帮助,可以在https://github.com/wp-premium/woocommerce-subscriptions查看源代码

【问题讨论】:

【参考方案1】:

感谢@LoicTheAztec 的answer 帮助我解决了这个问题!由于我只有每月订阅,因此使用以下代码管理显示经常性总计。例如,如果某人有每周和每月的重复价格,则此方法将不起作用。

$recurring_total = 0;

foreach ( WC()->cart->cart_contents as $item_key => $item )
    $item_quantity = $item['quantity'];
    $item_monthly_price = $item['data']->subscription_price;
    $item_recurring_total = $item_quantity * $item_monthly_price;
    $recurring_total += $item_recurring_total; 


echo $recurring_total;

【讨论】:

【参考方案2】:

与购物车和结帐相关的唯一可用功能在WooCommerce Subscriptions developer documentation

现在我认为您正在寻找的是购物车中剩余的相关订阅数据。为此,很容易输出购物车对象的原始数据(一旦您在订阅前添加到购物车)。然后你可以使用这段代码来输出这个数据:

1) 输出整个购物车对象原始数据:

print_r(WC()->cart);

然后你可以使用所有的WC_cart methods 例如:

WC()->cart->get_cart_contents_count( );

2) 在 foreach 循环中输出购物车项目:

foreach ( WC()->cart->cart_contents as $item_key => $item )
    print_r($item); echo '<br><br>'; // displaying the item raw data
    print_r($item['data']); echo '<br><br>'; // displaying the subscription object raw data
    echo $item['line_total']; echo '<br>'; // displaying item total
    echo $item['data']->subscription_price . '<br>'; // displaying subscription object total

一旦您详细查看了这些原始数据,您就会明白,要在迷你购物车中显示总计,您可能只需要使用带有 WC_Cart 专用方法的 WC()-&gt;cart 对象,例如:

WC()->cart->get_cart_total( );

显示

【讨论】:

谢谢!最初想知道是否会有任何预先制作的功能来显示经常性总计,因为它似乎非常重要。但是在您的回答的帮助下,我设法在answer 中解决了这个问题。 @LoicTheAztec & @txzn 也许这是订阅插件的新版本中的一个变化,但似乎class-wc-subscriptions-cart.php 中包含的函数display_recurring_totals() 在这里应该会有所帮助。我有与原始海报相反的问题,因为我想隐藏购物车中某些产品变体的经常性总计部分。是否可以覆盖 display_recurring_totals() 函数以添加条件?

以上是关于在 minicart 中显示 Woocommerce 订阅经常性总计的主要内容,如果未能解决你的问题,请参考以下文章

在标题中的 minicart 上为 slideDown() 和 slideUp() 设置动画

jquery购物车插件minicart.js

删除 $_SESSION 时未定义的索引

WooCommerce- 画布/绘画的 SizeInfo 按钮。 [PHP,Javascript,html,css]

Woocommerce 按产品类别对购物车产品进行排序

避免在 WooCommerce 结帐中进行计费电话验证