为了账号安全,请及时绑定邮箱和手机立即绑定

更改Woocommerce 3中的购物车项目价格

更改Woocommerce 3中的购物车项目价格

PHP
汪汪一只猫 2020-02-01 17:12:49
我正在尝试使用以下功能更改购物车中的产品价格:    add_action( 'woocommerce_before_shipping_calculator', 'add_custom_price'      );      function add_custom_price( $cart_object ) {         foreach ( $cart_object->cart_contents as $key => $value ) {         $value['data']->price = 400;        }      }它在WooCommerce版本2.6.x中正常工作,但在版本3.0+中不再工作如何使其在WooCommerce 3.0+版本中工作?谢谢。
查看完整描述

2 回答

?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

使用WooCommerce 3.0+版本时,您需要:


要改用woocommerce_before_calculate_totals钩子。

要改用WC_Cartget_cart()方法

要改用WC_productset_price()方法

这是代码:


add_action( 'woocommerce_before_calculate_totals', 'add_custom_price', 20, 1);

function add_custom_price( $cart ) {


    // This is necessary for WC 3.0+

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

        return;


    // Avoiding hook repetition (when using price calculations for example)

    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )

        return;


    // Loop through cart items

    foreach ( $cart->get_cart() as $item ) {

        $item['data']->set_price( 40 );

    }

}

该代码会出现在您活动的子主题(或主题)的function.php文件中,也可能会出现在任何插件文件中。


此代码已经过测试并且可以工作。


注意:您可以将钩子优先级从20增加到(甚至1000 2000)时使用一些特定的插件或其他自定义项。


查看完整回答
反对 回复 2020-02-01
?
精慕HU

TA贡献1845条经验 获得超8个赞

在WooCommerce版本3.2.6中,如果将优先级提高到1000,@ LoicTheAztec的答案将对我有用。

add_action( 'woocommerce_before_calculate_totals', 'add_custom_price', 1000, 1);

我试过的优先级值1099并且999但在我的车的价格和总没有变化(即使我能够证实与get_price()set_price()实际上已经设置的项目的价格。

我有一个自定义的挂钩,该挂钩向我的购物车添加了费用,并且我使用的是添加产品属性的第三方插件。我怀疑这些WooCommerce的“附加组件”会导致延迟,而这需要我延迟我的自定义操作。


查看完整回答
反对 回复 2020-02-01
  • 2 回答
  • 0 关注
  • 429 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信