Woocommerce Can';t将自定义购物车项目数据传递给WC()->;购物车->;将\添加到\购物车()4.9
我正在进行WooCommerceAPI插件开发,并尝试在AddtoCartAPI端点中使用以下代码传递自定义购物车项目数据Woocommerce Can';t将自定义购物车项目数据传递给WC()->;购物车->;将\添加到\购物车()4.9,woocommerce,woocommerce-rest-api,Woocommerce,Woocommerce Rest Api,我正在进行WooCommerceAPI插件开发,并尝试在AddtoCartAPI端点中使用以下代码传递自定义购物车项目数据 $cart_item_key = WC()->cart->add_to_cart( $product_id, $quantity, $variation_id, $variations, array('margin' => 200)); 并且希望在计算总计之前使用woocommerce\u上的自定义购物车项目数据(请参见下面的代码),但无法在那里获取自定
$cart_item_key = WC()->cart->add_to_cart( $product_id, $quantity, $variation_id, $variations, array('margin' => 200));
并且希望在计算总计之前使用woocommerce\u上的自定义购物车项目数据(请参见下面的代码),但无法在那里获取自定义购物车项目数据($cart\u item['margin'))
我已经安装了WooCommerceec4.9版本,请帮我解决这个问题。
提前感谢。为了做一个测试,我使用了
woocommerce\u add\u To\u cart\u验证
hook,并使用WC\u cart类的add\u To\u 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, 0, 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 );
}
}
}
根据建议,您可以尝试增加操作的优先级,如我上面的示例所示。我也有类似的问题,问题是有另一个插件可能在过滤器上具有更高的优先级。这是一个基于角色的定价插件,停用后,一切正常。因此,只需检查是否没有其他内容覆盖该函数。谢谢您的回答,但我想从插件代码中动态传递边距值。动态是什么意思?您想从每个产品的元值中获取边际值吗?我的意思是边际值不是一个静态值,它可以是任何值,我想通过add_to_API传递它。
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 );
}
}
}