一尘不染

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

php

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

    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+版中正常工作?

谢谢。


阅读 311

收藏
2020-05-26

共1个答案

一尘不染

更新 (2018年9月)

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

这是代码:

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-05-26