如何更改WooCommerce订阅押金和月付?

时间:2019-04-09 作者:Laurence Cope

客户希望对他们销售的订阅服务提供一些特定/定制的折扣。我找不到一个插件来满足他们的需要,所以我想我会自己编写它。

但我找不到如何在购物车中编辑订阅的初始付款项目。

使用woocommerce\\u before\\u calculate\\u totals,我可以编辑每月金额。但首期付款不变。尽管它将其价格循环到下面,因为我可以将其输出到屏幕上,所以我认为$cart\\u item[\'data]->set\\u price($new\\u price)不会改变初始付款的价格。

我可以通过woocommerce\\u cart\\u subtotal进行更改,但我看不到如何在该函数中获取原始价格来进行调整。但无论如何,这并不会改变税收和总额。

下面的代码没有使用$cart\\u item[\'data\']->get\\u price(),因为woocommerce\\u before\\u calculate\\u totals似乎被调用了两次,这会破坏我的计算。

function set_new_customer_discount( $cart )
{
    // Loop Through cart items
    foreach ( $cart->get_cart() as $key => $cart_item )
    {
        //Hook seems to be firing twice for some reason... Get the price from the original product data, not from the cart...
        $item_id = $cart_item[\'data\']->id;
        $product = wc_get_product( $item_id );
        $original_price = $product->get_price();
        $new_price = $original_price/2;
        $cart_item[\'data\']->set_price( $new_price );
    }
}
add_action(\'woocommerce_before_calculate_totals\', \'set_new_customer_discount\', 20, 1 );
篮子看起来是这样的,例如,“立即付款”行和“经常性总计”行都要打9折:

Basket totals

To pay now

Subtotal    £400.00
VAT £80.00
Total   £480.00

Recurring Totals

Subtotal    £577.80 / month for 5 months
VAT £115.56 / month for 5 months
Recurring Total £693.36 / month for 5 months
First payment: 9th May 2019

1 个回复
SO网友:Laurence Cope

我想我已经在这里找到了一个更简单的费用挂钩,实现了我想要的https://stackoverflow.com/questions/43415783/change-cart-total-price-in-woocommerce:

function prefix_add_discount_line( $cart )
{
    $discount = $cart->subtotal_ex_tax * 0.1;
    $cart->add_fee( __( \'10% Discount\', \'yourtext-domain\' ) , -$discount );
}
add_action( \'woocommerce_cart_calculate_fees\', \'prefix_add_discount_line\' );
这意味着“立即支付”包括税款和总额将减少10%,然后“经常性总额”包括税款和总额将减少10%。

Note: 请注意,我使用的是$cart->subtotal\\u ex\\u tax,而不是$cart->subtotal,因为$cart->subtotal返回的是小计加税,即使cart表将“subtotal”显示为价格ex.tax。

相关推荐

Testing hooks callback

我正在开发一个使用TDD的插件,有一件事我完全没有测试出来,那就是。。。挂钩。我的意思是好的,我可以测试钩子回调,但我如何测试钩子是否真的触发了(自定义钩子和WordPress默认钩子)?我认为一些嘲弄会有所帮助,但我就是想不出我错过了什么。我用WP-CLI安装了测试套件。根据this answer, init 钩子应该触发,但。。。事实并非如此;此外,该代码在WordPress内部工作。根据我的理解,引导程序是最后加载的,所以不触发init是有意义的,所以剩下的问题是:如果触发了挂钩,我该如何测试?谢谢