目前,如果一个商品进入客户的购物车,我将动态添加一个产品+优惠券。
// add Sufficiency Naked Calories to cart
add_action( 'wp_loaded', 'wc_custom_add_to_cart', 80 );
function wc_custom_add_to_cart( $product )
{
if (is_admin()) {
return;
}
$cart = WC()->cart->get_cart();
$products_to_check = array(10305, 10302, 10300, 10303, 10301);
$book = 10311;
$coupon_code = 'nutreincesufficiencyquiznakedcalories';
foreach ($cart as $cart_item_key => $values) {
$_product = $values['data'];
if ($_product->id == $book) return; // product has already been added
if (in_array($_product->id, $products_to_check)) {
WC()->cart->add_to_cart($book);
WC()->cart->add_discount($coupon_code);
break;
}
}
}
我想写一个函数,如果数组$products_to_check
中的任何一项离开购物车,则允许我删除$book
。
到目前为止,我的尝试都没有成功
add_action( 'wp_loaded', 'wc_custom_add_to_cart', 80 );
function wc_custom_add_to_cart( $product )
{
if (is_admin()) {
return;
}
$cart = WC()->cart->get_cart();
$products_to_check = array(10305, 10302, 10300, 10303, 10301);
$book = 10311;
$coupon_code = 'nutreincesufficiencyquiznakedcalories';
foreach ($cart as $cart_item_key => $values) {
$_product = $values['data'];
if ($_product->id == $book) return; // product has already been added
if (in_array($_product->id, $products_to_check)) {
WC()->cart->add_to_cart($book);
WC()->cart->add_discount($coupon_code);
}
if (in_array($_product->id, $products_to_check)) {
return;
} else {
WC()->cart->remove_cart_item($book);
}
}
}
尝试# 2
add_action( 'wp_loaded', 'wc_custom_add_to_cart', 80 );
function wc_custom_add_to_cart( $product )
{
if (is_admin()) {
return;
}
$cart = WC()->cart->get_cart();
$nutreince_sufficiency = array(10305, 10302, 10300, 10303, 10301);
$book = 10310;
$nutincart = false;
$coupon_code = 'nutreincesufficiencyquiznakedcalories';
foreach ($cart as $cart_item_key => $values) {
$_product = $values['data'];
if (in_array($_product->id, $nutreince_sufficiency)) {
$nutincart = true;
break;
}
}
if ($nutincart) {
WC()->cart->add_to_cart($book);
WC()->cart->add_discount($coupon_code);
} else {
echo $_product->id;
WC()->cart->set_quantity($book, 0);
}
}
将商品从购物车中移除,书仍然留在那里。
尝试更改add_action优先级以覆盖您的函数
帮助链接
功能set_quantity
要求使用$cart_item_key
作为目标产品,而不是$_product_id
add_action( 'wp_loaded', 'wc_custom_add_to_cart', 80 );
function wc_custom_add_to_cart( $product )
{
if (is_admin()) {
return;
}
$cart = WC()->cart->get_cart();
$nutreince_sufficiency = array(10305, 10302, 10300, 10303, 10301);
$book = 10310;
$nutincart = false;
$book_cart_reference = 0;
$coupon_code = 'nutreincesufficiencyquiznakedcalories';
foreach ($cart as $cart_item_key => $values) {
$_product = $values['data'];
if (in_array($_product->id, $nutreince_sufficiency)) {
$nutincart = true;
break;
}
// get cart item key for $book
if ( $_product->id == $book )
{
$book_cart_reference = $cart_item_key;
}
}
if ($nutincart) {
WC()->cart->add_to_cart($book);
WC()->cart->add_discount($coupon_code);
} else {
WC()->cart->set_quantity($book_cart_reference, 0);
}
}
在下面的示例中,我的目标是产品ID = 282,并检查当前购物车的总数。如果超过了$50的阈值,代码片段就循环遍历购物车中的商品,如果找到了商品就停止。在这个阶段,它存储了它的"购物车项键",最后使用remove_cart_item()函数来删除它。
add_action( 'template_redirect', 'remove_product_from_cart_programmatically' );
function remove_product_from_cart_programmatically() {
if ( is_admin() ) return;
$product_id = 282; // product id
$cart_total = 50; // replace with threshold
$in_cart = false;
foreach( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
if ( $cart_item['product_id'] === $product_id ) {
$in_cart = true;
$key = $cart_item_key;
break;
}
}
if( WC()->cart->total > $cart_total ) {
if ( $in_cart ) WC()->cart->remove_cart_item( $key );
}
}