如何解决在WooCommerce中以编程方式自动将礼品产品变化添加到购物车?
当有人将商品添加到购物车时,我正在尝试为woocommerce 创建买一送一的报价。下面的代码有效,但仅适用于简单的产品,我尝试将变体arr.each_with_object([]) do |h,arr|
arr << h["count"] if h["work_category"] == "CASE PICKS"
end
#=> ["21315","16842","24849"]
添加到变量中,但不起作用。有任何想法吗?感谢社区
ID
解决方法
要将产品变体添加到购物车,您需要父变量产品ID和产品变体ID(两者)。
现在,如果客户在购物车页面中更新购物车并删除了所需的产品ID,那么您正在使用的代码已过时,将无法使用。在这种情况下,礼品产品将在重新加载页面或跳转到另一页面后被删除。因此,template_redirect
不是要使用的正确钩子。
尝试以下方法,它们也可以处理简单的产品和产品变体:
add_action( 'woocommerce_before_calculate_totals','wc_auto_add_gift_to_cart' );
function wc_auto_add_gift_to_cart( $cart ) {
if (is_admin() && !defined('DOING_AJAX'))
return;
$required_product_id = 37; // The required product Id (or variation Id)
$parent_gift_id = 40; // The parent variable product Id (gift) for a product variation (set to zero for simple products)
$product_gift_id = 41; // the variation Id or the product Id (gift)
$has_required = $gift_key = false; // Initializing
foreach ( $cart->get_cart() as $cart_item_key => $cart_item ) {
// Check if required product is in cart
if( in_array( $required_product_id,array($cart_item['product_id'],$cart_item['variation_id']) ) ) {
$has_required = true;
}
// Check if gifted product is already in cart
if( $cart_item['data']->get_id() == $product_gift_id ) {
$gift_key = $cart_item_key;
}
}
// If gift is in cart,but not the required product: Remove gift from cart
if ( ! $has_required && $gift_key ) {
$cart->remove_cart_item( $gift_key );
}
// If gift is not in cart and the required product is in cart: Add gift to cart
elseif ( $has_required && ! $gift_key ) {
// For simple products
if( $parent_gift_id == 0 ) {
$cart->add_to_cart( $product_gift_id );
}
// For product variations (of a variable product)
else {
$cart->add_to_cart( $parent_gift_id,1,$product_gift_id );
}
}
}
代码进入活动子主题(或活动主题)的functions.php文件中。经过测试,可以正常工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。