2016-12-16 84 views
1

在我的WooCommerce網站上,我在這裏有一些代碼正在工作,但不是很好。各國根據類別和國家添加購買每件商品的運費

計算工作正常,但是當我添加的類別的價格是不正確的。

這裏是我的代碼:

add_filter('woocommerce_get_discounted_price', 'calculate_discounted_price', 10, 2); 
add_filter('woocommerce_cart_item_subtotal', 'display_discounted_price', 10, 2); 

function calculate_discounted_price($price, $values) { 
    global $woocommerce, $product; 

    $countryArray = array('AL', 'AD', 'AT', 'BY', 'BE', 'BA', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FO', 'FI', 'FR', 'DE', 'GI', 'GR', 'HU', 'IS', 'IE', 'IM', 'IT', 'RS', 'LV', 'LI', 'LT', 'LU', 'MK', 'MT', 'MD', 'MC', 'ME', 'NL', 'NO', 'PL', 'PT', 'RO', 'RU', 'SM', 'RS', 'SK', 'SI', 'ES', 'SE', 'CH', 'UA', 'VA', 'RS'); 
    $catArray = array('handbags','kids','hats'); 


       if($woocommerce->customer->get_shipping_country() == 'GB') { 

        foreach ($woocommerce->cart->cart_contents as $product) : 
        if (has_term($catArray, 'product_cat', $product['product_id'])) { 
         $price += 4.50; 
        } else { 
         $price += 8.50; 
        } 
        endforeach;    

       } elseif(in_array($woocommerce->customer->get_shipping_country(), $countryArray)) { 

        foreach ($woocommerce->cart->cart_contents as $product) : 
        if (has_term($catArray, 'product_cat', $product['product_id'])) { 
         $price += 4.50; 
        } else { 
         $price += 12.50;  
        } 
        endforeach; 

       } else { 

        foreach ($woocommerce->cart->cart_contents as $product) : 
        if (has_term($catArray, 'product_cat', $product['product_id'])) { 
         $price += 8.50; 
        } else { 
         $price += 18.50;  
        } 
        endforeach; 
       } 

    return $price; 
} 

function display_discounted_price($values, $item) { 
    return wc_price($item[ 'line_total' ]).'<br>incl. shipping'; 
} 

當我刪除所有的foreach語句,只留下它工作正常,該國的條件,foreach循環以某種方式導致了問題。

對此的一些幫助,將非常感激。

謝謝。

+0

任何人的幫助,感謝 –

回答

1

您不需要購物車的foreach循環來獲取產品ID,如下所示。 我還沒有解決你的問題顯示價格奇怪,因爲它似乎來自產品類別條件。我要進一步測試,但這個未完成的代碼將幫助您瞭解什麼是第一掛鉤函數的參數:

add_filter('woocommerce_get_discounted_price', 'calculate_discounted_price', 10, 3); 
function calculate_discounted_price($price, $cart_item, $cart_object) { 

    $country_arr = array('AL', 'AD', 'AT', 'BY', 'BE', 'BA', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FO', 'FI', 'FR', 'DE', 'GI', 'GR', 'HU', 'IS', 'IE', 'IM', 'IT', 'RS', 'LV', 'LI', 'LT', 'LU', 'MK', 'MT', 'MD', 'MC', 'ME', 'NL', 'NO', 'PL', 'PT', 'RO', 'RU', 'SM', 'RS', 'SK', 'SI', 'ES', 'SE', 'CH', 'UA', 'VA', 'RS'); 

    $cats_arr = array('handbags','kids','hats'); 

    // ONLY for logged users (I think) 
    $user_ship_country = WC()->customer->get_shipping_country(); 


    $product_id = $cart_item['product_id']; 

    if($user_ship_country == 'GB') { 

     if (has_term($cats_arr, 'product_cat', $product_id)) 
      $price += 4.50; 
     else 
      $price += 8.50; 

    } elseif(in_array($user_ship_country, $country_arr)) { 

     if (has_term($cats_arr, 'product_cat', $product_id)) 
      $price += 4.50; 
     else 
      $price += 12.50; 

    } else { 

     if (has_term($cats_arr, 'product_cat', $product_id)) 
      $price += 8.50; 
     else 
      $price += 18.50; 

    } 

    return $price; 
} 

add_filter('woocommerce_cart_item_subtotal', 'display_discounted_price', 10, 2); 
function display_discounted_price($values, $item) { 
    return wc_price($item[ 'line_total' ]).'<br>incl. shipping'; 
} 

而且WC()->customer->get_shipping_country();只會日誌杜松子酒客戶工作(我認爲)...

希望這會對你有所幫助。

但航運額外費用,我認爲你沒有使用正確的掛鉤......

+0

你好謝謝你的幫助,我覺得它的工作,但需要關閉看到計算,也應該是我使用的正確的鉤子? –

+0

我知道這並不容易,但感謝您的幫助...截至目前這將是一個臨時修復,直到那時我會回答你的答案 –

+0

@FrancisAlvinTan我會留下評論和更新我的答案,如果我得到正確的答案......我在同一時間工作......現在對我來說很不容易。謝謝:) – LoicTheAztec

相關問題