所以我試圖找到一個解決方案,通過他們的位置和賣家的位置之間的距離爲我的客戶收費,但找不到合適的東西。我發現很少有使用Google API在倉庫和貨運地點之間做類似工作的插件,但它們只處理一個倉庫。我實際上有幾個供應商在不同的地點有倉庫。根據賣家和客戶之間的距離的運費
我使用woocommerce和wc供應商插件。
僅供參考...我已經設置了一個meta字段,使用Google Api收集供應商的經緯度。
//一個例子://
供應商1 - 位置1供應商2 - 位置2
一位顧客從地方供應商1.客戶的位置順序是 位置A. API將計算購物車中物品的 供應商的位置,這是位置1,和客戶的位置,之間的距離,這是 位置A.
Check the cart item's Vendor Get the location of Vendor If Location 1 to Location A = 3KM, Shipping Charge is 50; If Location 1 to Location A <= 5 KM, Shipping Charge is 100; Else Shipping Charge is 150;
//示例結束//
N.B.我只是沒有找到任何插件遠程運輸費用與WC供應商插件很好。即使你設法給我任何做這項工作的任何插件的鏈接,這也是值得讚賞的。
所以,@loictheaztec提供了一個解決方案如下。我已經根據他的代碼寫了一段代碼。不幸的是,它不適合我。
add_filter('woocommerce_package_rates', 'distance_shipping_calculated_surcharge', 100, 2);
function distance_shipping_calculated_surcharge($rates, $package) {
$shippingurl = "https://maps.googleapis.com/maps/api/distancematrix/json?origins=VENDOR_LOCATION&destinations=CUSTOMER_LOCATION&key=MY_API_KEY";
//fetch json response from googleapis.com:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $shippingurl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = json_decode(curl_exec($ch), true);
//If google responds with a status of OK
//Extract the distance text:
if($response['status'] == "OK"){
$dist = $response['rows'][0]['elements'][0]['distance']['text'];
}
// Get only number from string
$distance= filter_var ($dist, FILTER_SANITIZE_NUMBER_INT);
// Distance example
//$distance = 3.5; //(in KM)
if($distance > 5)
$cost_operator = 3; // (3 * 50 = 150)
elseif($distance > 3 && $distance <= 5)
$cost_operator = 2; // (2 * 50 = 100)
else
$cost_operator = 1; // (1 * 50 = 50)
// Iterating through each shipping rate
foreach($rates as $rate_key => $rate_values){
$method_id = $rate_values->method_id;
$rate_id = $rate_values->id;
// Targeting "Flat Rate" shipping method
if ('flat_rate' === $rate_values->method_id) {
// Set the new calculated rate cost
$rates[$rate_id]->cost = number_format($rates[$rate_id]->cost * $cost_operator, 2);
// Taxes rate cost (if enabled)
foreach ($rates[$rate_id]->taxes as $key => $tax){
if($rates[$rate_id]->taxes[$key] > 0){ // set the new tax cost
$rates[$rate_id]->taxes[$key] = number_format($rates[$rate_id]->taxes[$key] * $cost_operator, 2);
}
}
}
}
return $rates;
}
嗨@loictheaztec,謝謝您的配合。不幸的是,它不適合我。請看下面的答案,因爲這裏寫的太長。 – MAD
你能再看看這個問題嗎?我在問題的底部添加了幾行,謝謝 – MAD