2016-12-09 9 views
0

Все мои товары имеют варианты для дня доставки. Вторник или пятница:woocommerce отправка в зависимости от товара в корзине

example

Я хочу, чтобы взимать дополнительную плату за доставку, если пользователь имеет в корзину товаров для вторник и пятницу. Не уверен, как я могу получить все предметы в корзине, а затем проверить вариации и изменить стоимость доставки.

function filter_woocommerce_add_to_cart() { 
global $woocommerce; 
    $items = $woocommerce->cart->get_cart(); 
     if (sizeof($items) >= 1) { 
      foreach($items as $item => $values) { 
       $_product = $values['data']; 
       echo "<script type='text/javascript'>alert('$_product ');</script>"; 
      }   
     } 
}; 

// add the filter  
add_filter('woocommerce_add_to_cart', 'filter_woocommerce_add_to_cart', 10, 2); 

Я получил это далеко. Внутри if я хочу напечатать массив продуктов, чтобы увидеть, как вызывается значение вариации продукта. Но не работает по какой-то причине.

ответ

0

Понял работать таким образом

function get_variation_data_from_variation_id($item_id) { 
    $_product = new WC_Product_Variation($item_id); 
    $variation_data = $_product->get_variation_attributes(); 
    $variation_detail = woocommerce_get_formatted_variation($variation_data, true); // this will give all variation detail in one line 
    // $variation_detail = woocommerce_get_formatted_variation($variation_data, false); // this will give all variation detail one by one 
    return $variation_detail; // $variation_detail will return string containing variation detail which can be used to print on website 
    // return $variation_data; // $variation_data will return only the data which can be used to store variation data 
} 


// define the woocommerce_loop_add_to_cart_link callback  
function wc_ninja_change_flat_rates_cost($rates, $package) { 
    if (WC()->cart->cart_contents_count > 1) { 
     $cart_items = WC()->cart->get_cart(); 
     $first_item = array_shift($cart_items); 
     $variation1 = get_variation_data_from_variation_id($first_item['data']->variation_id); 
     foreach( $cart_items as $cart_item) { 
      $variations = get_variation_data_from_variation_id($cart_item['data']->variation_id); 
      if($variations != $variation1){ 
       $rates['flat_rate:5']->cost = 20; 
       break; 
      }//end if 
     } //end for 
    } //end if 
debug_to_console($rates); 
    return $rates; 
}; 

// add the filter  
add_filter('woocommerce_package_rates', 'wc_ninja_change_flat_rates_cost', 10, 2);