2017-02-17 14 views
5

Với WooCommerce, tôi cần có Giao hàng miễn phí với số tiền nhất định là ngoại trừ các sản phẩm nặng có trong giỏ hàng.Miễn phí vận chuyển tùy thuộc vào trọng lượng và số tiền tối thiểu

Có ai biết tôi nên làm gì không?

Cảm ơn.

+0

Vì vậy, bạn muốn giao hàng miễn phí cho một số mặt hàng trong giỏ hàng chứ không phải cho các mặt hàng khác? –

+1

vui lòng chỉnh sửa câu hỏi của bạn theo [mcve] –

+0

hey there yes kinda.I chỉ cần vận chuyển miễn phí cho các sản phẩm nhẹ hơn 250. Tôi cần phải có các sản phẩm nặng với chi phí vận chuyển vượt quá giới hạn 250. – spy

Trả lời

3

mã tùy chỉnh này sẽ giữ miễn phí phương pháp vận chuyển và sẽ giấu các phương pháp vận chuyển khác khi lượng giỏ lên đến và nếu sản phẩm không nặng (dưới 20 kg ở đây) ... Để không cho phép Giao hàng miễn phí cho các đơn đặt hàng dưới 250, bạn có thể đặt giao dịch này trong woocommerce (xem ở cuối).

Trước tiên, bạn sẽ phải chắc chắn rằng trọng lượng được thiết lập trong mỗi sản phẩm nặng (đối với sản phẩm đơn giản hoặc các biến (trong mỗi biến thể). Các giỏ tổng phụ ở đây là Không bao gồm thuế(và bạn có thể thay đổi nó để Gồm . thuế một cách dễ dàng)

enter image description here

Sau đó, ở đây là tùy chỉnh móc hàm trong woocommerce_package_rates lọc móc:

add_filter('woocommerce_package_rates', 'conditionally_hide_other_shipping_based_on_items_weight', 100, 1); 
function conditionally_hide_other_shipping_based_on_items_weight($rates) { 

    // Set HERE your targeted weight (here is 20 kg) <== <== <== <== <== 
    $target_product_weight = 20; 

    // Set HERE your targeted cart amount (here is 250) <== <== <== <== <== 
    $target_cart_amount = 250; 
    // For cart subtotal amount EXCLUDING TAXES 
    WC()->cart->subtotal_ex_tax >= $target_cart_amount ? $passed = true : $passed = false ; 
    // For cart subtotal amount INCLUDING TAXES (replace by this): 
    // WC()->cart->subtotal >= $target_cart_amount ? $passed = true : $passed = false ; 

    // Iterating trough cart items to get the weight for each item 
    foreach(WC()->cart->get_cart() as $cart_item){ 
     if($cart_item['variation_id'] > 0) 
      $item_id = $cart_item['variation_id']; 
     else 
      $item_id = $cart_item['product_id']; 

     // Getting the product weight 
     $product_weight = get_post_meta($item_id , '_weight', true); 

     if(!empty($product_weight) && $product_weight >= $target_cart_amount){ 
      $light_products_only = false; 
      break; 
     } 
     else $light_products_only = true; 
    } 

    // If 'free_shipping' method is available and if products are not heavy 
    // and cart amout up to the target limit, we hide other methods 
    $free = array(); 
    foreach ($rates as $rate_id => $rate) { 
     if ('free_shipping' === $rate->method_id && $passed && $light_products_only) { 
      $free[ $rate_id ] = $rate; 
      break; 
     } 
    } 

    return ! empty($free) ? $free : $rates; 
} 

Mã đi trong tệp function.php của chủ đề con đang hoạt động của bạn (hoặc chủ đề) hoặc cũng trong bất kỳ tệp plugin nào.

Mã này đã được thử nghiệm và nó hoạt động cho các sản phẩm đơn giản và biến ...

Bạn cũng có phải trong WooCommerce cài đặt> Vận chuyển, cho từng khu vực vận chuyển và cho "Free Shipping" phương pháp số lượng đặt hàng tối thiểu của bạn:

enter image description here

Bạn cần phải làm mới dữ liệu đã lưu trong bộ nhớ cache: tắt, lưu và bật, lưu các phương thức giao hàng liên quan cho vùng vận chuyển hiện tại, trong cài đặt giao hàng woocommerce.

+0

Cảm ơn bạn rất nhiều cho thời gian của bạn !! Điều này sẽ chỉ cung cấp cho các mặt hàng nặng một/kg chi phí vận chuyển trên 250 Trong khi các mặt hàng "ánh sáng" được bao gồm trong giỏ hàng sẽ được miễn phí vận chuyển? – spy

+0

tôi không hiểu tôi nghĩ rằng xin lỗi vì điều đó ... vì vậy điều gì sẽ xảy ra với các vật nặng trên giỏ hàng với ánh sáng? một chi phí vận chuyển như tôi muốn? – spy

0

Để được giao hàng miễn phí với số tiền nhất định, bạn có thể sử dụng tùy chọn WooCommerce sẵn có.

Để bỏ qua giao hàng miễn phí nếu đối với một số sản phẩm cụ thể, bạn có thể sử dụng đoạn mã bên dưới.

add_filter('woocommerce_package_rates', 'hide_shipping_method_if_particular_product_available_in_cart', 10, 2); 

     function hide_shipping_method_if_particular_product_available_in_cart($available_shipping_methods) 
     { 
      global $woocommerce; 

      // products_array should be filled with all the products ids 
      // for which shipping method (stamps) to be restricted. 

      $products_array = array(
       101, 
       102, 
       103, 
       104 
      ); 

      // You can find the shipping service codes by doing inspect element using 
      // developer tools of chrome. Code for each shipping service can be obtained by 
      // checking 'value' of shipping option. 

      $shipping_services_to_hide = array(
       'free_shipping', 

      ); 

      // Get all products from the cart. 

      $products = $woocommerce->cart->get_cart(); 

      // Crawl through each items in the cart. 

      foreach($products as $key => $item) { 

       // If any product id from the array is present in the cart, 
       // unset all shipping method services part of shipping_services_to_hide array. 

       if (in_array($item['product_id'], $products_array)) { 
        foreach($shipping_services_to_hide as & $value) { 
         unset($available_shipping_methods[$value]); 
        } 

        break; 
       } 
      } 

      // return updated available_shipping_methods; 
    return 
     } 
+0

hey và cảm ơn cho đoạn mã.Tôi chỉ cần vận chuyển miễn phí cho các sản phẩm nhẹ hơn 250. Tôi cần phải có các sản phẩm nặng với chi phí vận chuyển vượt quá giới hạn 250. Có phải đoạn mã đó bao gồm cả không? Cảm ơn rất nhiều – spy

+0

miễn phí giao hàng cho số tiền tối thiểu nhất định có thể đặt qua Woocommerce. –

+0

id sản phẩm nặng có thể được thêm vào đoạn và có thể quản lý vận chuyển với slght modificatio –

Các vấn đề liên quan