問題描述
我正在開發一個網上商店,有不同的方面,第一個是普通商店,第二個是夜間啤酒服務.我已經搜索過但找不到我要找的東西;
I'm developing a webshop, with different aspects, the first is a regular shop, and the second is a night beer service. i've searched but can't find what i am looking for;
首先,夜間啤酒服務是一個特定類別,不應與常規商品一起訂購(如果類別 'beerservice'
在購物車中,請禁用所有其他類別以添加到購物車).
First the night beer service is a specific category that shouldn't be ordered with the regular items (if category 'beerservice'
is in the cart, disable all other categories to be added to the cart).
此選項也需要反之亦然(其他情況),因此如果將常規商品添加到購物車,則應禁用 'beerservice'
類別以添加到購物車購物車.
This option also needs to work vice-versa (the other wat around), so if a regular item is added to the cart, the category of 'beerservice'
should be disabled to add to the cart.
我正在使用我找到的這個答案代碼:
當來自特定產品類別的商品在 Woocommerce 的購物車中時禁用購物
I am using this answer code that I have found:
Disable shopping when an item from a specific product category is in cart in Woocommerce
這部分完成了工作,但只能從同一類別添加多個產品,反之亦然.我已經替換了這段代碼
That does the job partially, but it's only impossible to add multiple products from the same category, and is doesn't work vice-vera. I have replaced in this code
我還想添加一條特定于時間的消息,例如超過 TIME 訂購的訂單將不會送達"(沒有研究過這個),但如果不是很麻煩.
I also would like to add a time specific message like, 'Order ordered past TIME won't be delivered'(didn't research this) but if it isn't to much trouble.
推薦答案
此代碼將檢查父產品類別,因此對于定義的產品類別,它將:
This code will check for parent product categories, so for a defined product category, it will:
- 當定義的類別在購物車中時,避免將其他產品類別添加到購物車.
- 將定義類別中的產品添加到購物車時,它將從其他產品類別中刪除購物車項目.
改進的代碼:
// Custom conditional function that checks for parent product categories
function has_parent_term( $product_id ) {
// HERE set your targeted product category SLUG
$category_slug = 'beerservice'; // <==== <==== <==== <==== <==== <==== <====
// Convert category term slug to term id
$category_id = get_term_by('slug', $category_slug, 'product_cat')->term_id;
$parent_term_ids = array(); // Initializing
// Loop through the current product category terms to get only parent main category term
foreach( get_the_terms( $product_id, 'product_cat' ) as $term ){
if( $term->parent > 0 ){
$parent_term_ids[] = $term->parent; // Set the parent product category
} else {
$parent_term_ids[] = $term->term_id;
}
}
return in_array( $category_id, $parent_term_ids );
}
// Avoid add to cart others product categories when "beerservice" is in cart
add_filter( 'woocommerce_add_to_cart_validation', 'specific_category_avoid_add_to_cart_others', 20, 3 );
function specific_category_avoid_add_to_cart_others( $passed, $product_id, $quantity) {
if( WC()->cart->is_empty() || has_parent_term( $product_id ) ) {
return $passed;
}
foreach( WC()->cart->get_cart() as $cart_item ){
if( has_parent_term( $cart_item['product_id'] ) ) {
wc_add_notice( __('Alert message 1 (avoid add to cart)', 'woocommerce' ), 'error' ); // Display a custom error notice
return false; // Avoid add to cart
}
}
return $passed;
}
// Remove other items when our specific product is added to cart
add_action( 'woocommerce_add_to_cart', 'conditionally_remove_other_products', 20, 4 );
function conditionally_remove_other_products ( $cart_item_key, $product_id, $quantity, $variation_id ){
if( has_parent_term( $product_id ) ) {
foreach( WC()->cart->get_cart() as $item_key => $cart_item ){
if( ! has_parent_term( $cart_item['product_id'] ) ) {
WC()->cart->remove_cart_item( $item_key );
wc_add_notice( __('Alert message 2 (Item removed from cart)', 'woocommerce' ), 'error' ); // Display a custom error notice
}
}
}
}
代碼位于您的活動子主題(活動主題)的 function.php 文件中.經測試有效.
Code goes in function.php file of your active child theme (active theme). Tested and works.
相關:當 Woocommerce 的購物車中有特定產品類別的商品時禁用購物
這篇關于禁用 Woocommerce 中特定類別的購物車項目的其他產品類別的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!