問題描述
我正在開發(fā)一個網(wǎng)上商店,有不同的方面,第一個是普通商店,第二個是夜間啤酒服務(wù).我已經(jīng)搜索過但找不到我要找的東西;
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;
首先,夜間啤酒服務(wù)是一個特定類別,不應(yīng)與常規(guī)商品一起訂購(如果類別 '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).
此選項(xiàng)也需要反之亦然(其他情況),因此如果將常規(guī)商品添加到購物車,則應(yīng)禁用 '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.
我正在使用我找到的這個答案代碼:
當(dāng)來自特定產(chǎn)品類別的商品在 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
這部分完成了工作,但只能從同一類別添加多個產(chǎn)品,反之亦然.我已經(jīng)替換了這段代碼
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 訂購的訂單將不會送達(dá)"(沒有研究過這個),但如果不是很麻煩.
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.
推薦答案
此代碼將檢查父產(chǎn)品類別,因此對于定義的產(chǎn)品類別,它將:
This code will check for parent product categories, so for a defined product category, it will:
- 當(dāng)定義的類別在購物車中時,避免將其他產(chǎn)品類別添加到購物車.
- 將定義類別中的產(chǎn)品添加到購物車時,它將從其他產(chǎn)品類別中刪除購物車項(xiàng)目.
改進(jìn)的代碼:
// 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 文件中.經(jīng)測試有效.
Code goes in function.php file of your active child theme (active theme). Tested and works.
相關(guān):當(dāng) Woocommerce 的購物車中有特定產(chǎn)品類別的商品時禁用購物
這篇關(guān)于禁用 Woocommerce 中特定類別的購物車項(xiàng)目的其他產(chǎn)品類別的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網(wǎng)!