2016-01-13 96 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

相关问题