如何解决无法将自定义购物车项目数据传递给 WC()->cart->add_to_cart() woocommerce 4.9
我正在开发 woocommerce API 插件,并尝试使用以下代码传递自定义购物车项目数据以添加到购物车 API 端点。
$cart_item_key = WC()->cart->add_to_cart( $product_id,$quantity,$variation_id,$variations,array('margin' => 200));
并且想要在 woocommerce_before_calculate_totals 钩子上使用该自定义购物车商品数据(请参阅下面的代码),但无法在那里获取自定义购物车商品数据 ($cart_item['margin'])。
add_action( 'woocommerce_before_calculate_totals','custom_cart_item_price',30,1 );
function custom_cart_item_price( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
foreach ( $cart->get_cart() as $cart_item ) {
if( isset($cart_item['margin']) ){
$final_price = ($cart_item['data']->get_price() + $cart_item['margin']);
$cart_item['data']->set_price($final_price);
}
}
}
我已经安装了 Woocommerece 4.9 版本,请帮我解决这个问题。 提前致谢。
解决方法
我遇到了同样的问题,问题是有另一个插件可能在过滤器上具有更高的优先级。这是一个基于角色的定价插件,停用它后,一切正常。所以只需检查是否有其他东西覆盖了该函数。
,为了进行测试,我使用了 woocommerce_add_to_cart_validation
钩子,并使用 WC_Cart 类的 add_to_cart()
方法将产品添加到购物车。
add_action( 'woocommerce_add_to_cart_validation','add_product_to_cart_programmatically',10,3 );
function add_product_to_cart_programmatically( $passed,$product_id,$quantity) {
$product_id = 166; // product id to add
$quantity = 10; // quantity product to add
WC()->cart->add_to_cart( $product_id,$quantity,array(),array( 'margin' => 200 ) );
return $passed;
}
将产品添加到购物车后,我可以根据自定义购物车项目数据应用自定义价格:
add_action( 'woocommerce_before_calculate_totals','custom_cart_item_price',30,1 );
function custom_cart_item_price( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
foreach ( $cart->get_cart() as $cart_item ) {
if ( isset( $cart_item['margin'] ) && ! empty( $cart_item['margin'] ) ) {
$final_price = $cart_item['data']->get_price() + $cart_item['margin'];
$cart_item['data']->set_price( $final_price );
}
}
}
按照 @danielsalare 的建议,您可以尝试提高操作的优先级,如我上面的示例所示。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。