2016-01-13 113 views
3

我建立我的電子商務出售葡萄酒與wordpress 4.2.2和woocommerce 2.3.11。 我創建了一個自定義函數,只用6的倍數瓶子來結束訂單。 直到這我沒有任何問題,但我有2個包裝6瓶的類別,所以我想避免這2個類別將數量總數項目購物車。 我不擅長於PHP,所以我嘗試創建一個函數,檢查每個項目是否在類別內,如果屬於一個包類別,則減去一個項目。 這項工作只有在這兩個類別中有一個項目時纔有效,但如果我在購物車上添加2個包裹,則只會減去一個。從總數購物車中刪除產品類別woocommerce

add_action('woocommerce_check_cart_items', 'woocommerce_check_cart_quantities'); 
function woocommerce_check_cart_quantities() { 
$total_products = WC()->cart->cart_contents_count; 
$multiples = 6; 
foreach (WC()->cart->get_cart() as $cart_item_key => $values) { 
    $prodotti = $values['data']; 
    $terms = get_the_terms ($prodotti->id, 'product_cat'); 
    foreach ($terms as $term){ 
     $categoria = $term->term_id; 
    } 

    if (($categoria == 169) || ($categoria == 152)) { 
      $pacchetti = $values ['quantity']; 
      $totale = ($total_products-$pacchetti); 
    } else { 
     $totale = $total_products; 
    } 
} 
echo $totale; 
if (($totale % $multiples) > 0) 
    wc_add_notice(sprintf(__('You need to buy in quantities of 6 products', 'woocommerce'), $multiples), 'error'); 

}  

所需計時:

Screen 1 - Right Counting

現有計數

Screen 2 - Wrong counting

我開爲使這個工作的每一個解決方案。

非常感謝!

+0

我將不得不考慮更多,但如何使用[Product Bundles](https://www.woothemes.com/products/product-bundles/)來處理需要銷售的物品6包? – helgatheviking

+0

再次嗨:)。產品捆綁根本不起作用:(還有以前的幫助,我也僱傭了一名自由職業者,但沒有成功,所以我放棄了使用它的想法,並且從今天開始尋找另一種解決方案,以上代碼 – Wolftrick

+0

爲什麼產品包不工作?根據你的描述,它看起來就像是你的用例。不幸的是,你不能總是僱用一個好的自由職業者,這也發生在我以前的事情上。對於WooCommerce特定的項目,你可能會請好好僱用[Woo專家](https://www.woothemes.com/experts/) – helgatheviking

回答

2

你的代碼對我來說看起來不錯。我認爲你缺少的一件事是has_term()功能,以更可靠地測試哪些產品屬於你的兩個特殊類別。

add_action('woocommerce_check_cart_items', 'woocommerce_check_cart_quantities'); 
function woocommerce_check_cart_quantities() { 
    $total_products = WC()->cart->cart_contents_count; 
    $multiples = 6; 
    $totale = 0; 
    foreach (WC()->cart->get_cart() as $cart_item_key => $values) { 
     $prodotti = $values['data']; 

     if(! has_term(array(169, 152), 'product_cat', $prodotti->id)){ 
      $totale += $values['quantity']; 
     } 

    } 
    echo $totale; 
    if (($totale % $multiples) > 0){ 
     wc_add_notice(sprintf(__('You need to buy in multiples of %d products', 'your-textdomain'), $multiples), 'error'); 
    } 

} 
+0

令人驚歎!這很好用! 因爲你今晚拯救了我的生命,我會給你買瑪格麗塔:) 如果我可以問......爲什麼我的代碼不起作用? (我想盡可能地學習) – Wolftrick

+0

太棒了!不要忘記將此標記爲已接受的答案。並感謝你的瑪格麗塔酒。如果我不得不猜測爲什麼你的代碼不起作用,我認爲它可能是'foreach()'循環。如果您的產品處於多個類別中,那麼'$ categoria = $ term-> term_id;'可以隨意作爲'$ terms'中的最後一個類別。這會讓你的'if()'語句不可靠。 – helgatheviking

+0

ahhh好了,明白了!再次感謝你 – Wolftrick

相關問題