我正在尝试使用以下功能更改购物车中的产品价格:
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+版中正常工作?
谢谢。
更新 (2018年9月)
使用 WooCommerce 3.0+版本, 您需要:
woocommerce_before_calculate_totals
get_cart()
set_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 )_ 时使用一些特定的插件或其他自定义项。
20
1000
2000