在Woocommerce 3中更改购物车商品价格

时间:2017-04-10 13:31:32

标签: php wordpress woocommerce cart product

我正在尝试使用以下功能在购物车中更改产品价格:

    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 个答案:

答案 0 :(得分:32)

更新 (2018年9月)

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

以下是代码:

add_action( 'woocommerce_before_calculate_totals', 'add_custom_price', 20, 1);
function add_custom_price( $cart_obj ) {

    // 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_obj->get_cart() as $cart_item ) {
        $cart_item['data']->set_price( 40 );
    }
 }

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

此代码经过测试并有效。

  

注意:您可以将优先级提高 20 改为 1000 (甚至 2000 使用一些特定的时候插件或其他自定义。

相关:

答案 1 :(得分:1)

使用WooCommerce版本3.2.6,@ LoicTheAztec的答案适用于我,如果我将优先级提高到1000.

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

我尝试了1099999的优先级值,但我的购物车中的价格和总数没有变化(即使我能够通过get_price()确认set_price()实际设定了商品的价格。

我有一个自定义挂钩,可以为我的购物车增加费用,而且我使用的第三方插件添加了产品属性。我怀疑这些WooCommerce"附加组件"引入延迟,要求我延迟我的自定义操作。