2 回答
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)时使用一些特定的插件或其他自定义项。
TA贡献1845条经验 获得超8个赞
在WooCommerce版本3.2.6中,如果将优先级提高到1000,@ LoicTheAztec的答案将对我有用。
add_action( 'woocommerce_before_calculate_totals', 'add_custom_price', 1000, 1);
我试过的优先级值10
,99
并且999
但在我的车的价格和总没有变化(即使我能够证实与get_price()
那set_price()
实际上已经设置的项目的价格。
我有一个自定义的挂钩,该挂钩向我的购物车添加了费用,并且我使用的是添加产品属性的第三方插件。我怀疑这些WooCommerce的“附加组件”会导致延迟,而这需要我延迟我的自定义操作。
- 2 回答
- 0 关注
- 429 浏览
添加回答
举报