更新時間:
有可能首先檢查上添加到購物車事件(可選顯示錯誤通知):
add_filter('woocommerce_add_to_cart_validation', 'checking_products_added_to_cart', 10, 3);
function checking_products_added_to_cart($passed, $product_id, $quantity) {
$cat_add = 'Make it a Meal';
$cat_src = 'Main Meal';
if(has_term($cat_add, 'product_cat', $product_id)):
$main_meal_count = 0;
$make_it_a_meal_count = 0;
foreach (WC()->cart->get_cart() as $cart_item){
// Counting 'Main Meal' products in cart (with quantity)
if(has_term($cat_src, 'product_cat', $cart_item['product_id']))
$main_meal_count += $cart_item['quantity'];
// Counting 'Make it a Meal' products in cart (with quantity)
if(has_term($cat_add, 'product_cat', $cart_item['product_id']))
$make_it_a_meal_count += $cart_item['quantity'];
}
if($main_meal_count < ($make_it_a_meal_count + $quantity)) {
$passed = false;
// Displaying a message (optionnal)
wc_add_notice('my custom error message…', 'error');
}
endif;
return $passed;
}
然後,您還需要檢查時,車量改變或購物車物品刪除:
add_action('woocommerce_calculate_totals', 'check_removed_cart_items', 10, 1);
function check_removed_cart_items($cart_object) {
if (is_admin() && ! defined('DOING_AJAX'))
return;
$cat_add = 'Make it a Meal';
$cat_src = 'Main Meal';
$main_meal_count = 0;
$make_it_a_meal_count = 0;
// First loop: Counting cart items 'Main Meal' and 'Make it a Meal'
foreach ($cart_object->get_cart() as $item_values){
// Counting 'Main Meal' products in cart (with quantity)
if(has_term($cat_src, 'product_cat', $item_values['product_id']))
$main_meal_count += $item_values['quantity'];
// Counting 'Make it a Meal' products in cart (with quantity)
if(has_term($cat_add, 'product_cat', $item_values['product_id'])){
$make_it_a_meal_count += $item_values['quantity'];
}
}
$difference = intval($make_it_a_meal_count - $main_meal_count);
echo '<p>$main_meal_count is '.$main_meal_count.'</p>';
echo '<p>$make_it_a_meal_count is '.$make_it_a_meal_count.'</p>';
echo '<p>$difference is '.$difference.'</p>';
if($main_meal_count < $make_it_a_meal_count) {
echo '<p>case1</p>';
// Second Loop: Make necessary actions
foreach ($cart_object->get_cart() as $cart_item_key => $cart_item){
// Targeting 'Make it a Meal'
if(has_term($cat_add, 'product_cat', $cart_item['product_id'])){
$item_qty = intval($cart_item['quantity']);
if($item_qty == 1 && $difference == 1){
$cart_object->remove_cart_item($cart_item_key);
break;
} else {
if($item_qty > 1 && $difference <= $item_qty){
$cart_object->set_quantity($cart_item_key, ($item_qty - $difference));
break;
} else {
$cart_object->remove_cart_item($cart_item_key);
}
}
}
}
}
}
有了這2個掛鉤功能,你有一個完整的解決方案。
代碼會出現在您的活動子主題(或主題)的function.php文件中,或者也存在於任何插件文件中。
此代碼已經過測試並可正常工作。
非常感謝你!這對於「簡單產品」很有用。你知道如何讓它與「變量產品」一起工作嗎? – user2766888
只是爲了確認,WooCommerce通知正確顯示變量產品(即XXX產品已添加到購物車或我的自定義錯誤消息)。但是當我查看購物車時,變量產品未成功添加。 – user2766888