Woocommerce结帐:如果产品来自不同类别,则创建自定义费用

时间:2019-06-27 11:47:54

标签: wordpress woocommerce

场景:

我们是在线多餐厅送货服务:

如果客户从2家或更多不同的餐厅订购,我们需要加收额外费用。因此,为每家餐厅加收2欧元的额外费用。

示例:

  • 客户选择一顿饭:免费
  • 客户在同一家餐厅选择两餐:免费
  • 客户从2家差异化餐厅中选择2餐:2欧元的额外费用
  • 客户从3家差异化餐厅中选择3餐:2欧元+ 2欧元= 4欧元
  • 客户从4家差异餐厅中选择4餐:2€+ 2€+ 2€= 6€ ...等等

类别:

  • 每个餐厅都是1类
  • 每顿饭有不止一种类别,并且
  • 我们需要检查购物车结账时每顿饭的这一类别是否相同或不同

问题:

我们认为这可能会起作用:

  • 我们可能必须在购物车结帐时滚动浏览每餐(产品),并且
  • 我们必须获取每餐的类别,并且
  • 比较每餐+检查它们是否属于差异餐厅

餐馆是一个子类别,例如:

城市(最高排名)->餐馆(儿童最高)->膳食(产品)

解决方案:

因此,我们认为编写一些代码来检查购物车结帐中的产品(餐食)是否来自多个类别(餐厅)可能容易些?然后申请额外费用?

这里需要一些有关如何最好地解决这种情况的帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

为此,请在活动主题的functions.php中添加以下代码段-

function woo_add_cart_fee() {
    global $woocommerce;
    $items = $woocommerce->cart->get_cart();
    $restaurant = array();
    foreach($items as $item => $values) { 
        $available_restaurant_cat_ids = array(); // Replace the empty array with all avaiable 'restaurants' categories ids
        $restaurant_list_ids = wp_get_post_terms($values['data']->get_id(),'product_cat',array('fields'=>'ids')); // we assumed that restaurant belongs to product_cat
        if($restaurant_list_ids){
            foreach ($restaurant_list_ids as $id) {
                if(!in_array($id, $available_restaurant_cat_ids)) continue; // id not belongs to restaurant
                if(!in_array($id, $restaurant)){
                    $restaurant[] = $id;
                }
            }
        }
    } 
    $restaurant_multiply = count($restaurant) - 1; // first restaurant id free
    $extra_fee = 2; // 2 euro

    $woocommerce->cart->add_fee( __('Extra fees', 'woocommerce'), $extra_fee*$restaurant_multiply );

}
add_action( 'woocommerce_cart_calculate_fees', 'woo_add_cart_fee' );