郵遞區號驗證不適用於郵遞區號範圍
P粉449281068
P粉449281068 2023-09-08 09:16:07
0
1
577

嘗試在 woocommerce 中建立郵遞區號驗證。

我無法讓我的查詢查看像 10000-000...15000-000 這樣的範圍間隔。

我的查詢適用於簡單的郵遞區號(10000-000 或 11001-001),但不適用於郵遞區號範圍。

global $wpdb;
    $tabela_cep = $wpdb->prefix . 'woocommerce_shipping_zone_locations';
    $query = "SELECT location_code FROM $tabela_cep WHERE location_code = %s LIMIT 1";
    $resultado = $wpdb->get_var($wpdb->prepare($query, $cep));

我不知道 woocommerce 如何在資料庫中儲存所有運輸區域的所有範圍。

我嘗試過“ Between”sintax來過濾字段locationcode和locationcode2,但我不確定這是否是正確的字段名稱/表名稱,甚至是否有其他方法可以實現這個。

global $wpdb; 
$tabela_cep = $wpdb->prefix . 'woocommerce_shipping_zone_locations'; 
$query = "SELECT location_code FROM $tabela_cep WHERE %s BETWEEN CAST(location_code AS UNSIGNED) AND CAST(location_code2 AS UNSIGNED) LIMIT 1";
$resultado = $wpdb->get_var($wpdb->prepare($query, $cep));

謝謝

P粉449281068
P粉449281068

全部回覆(1)
P粉872182023

我不知道這是否有幫助,但已經有一個名為 wc_postcode_location_matcher() 的核心 WooCommerce 函數,可以檢查給定的郵遞區號是否在郵遞區號範圍內。

您首先需要計算 $postcode_locations:

global $wpdb;
$postcode_locations = $wpdb->get_results( "SELECT zone_id, location_code FROM {$wpdb->prefix}woocommerce_shipping_zone_locations WHERE location_type = 'postcode';" );

然後您需要 $country,因此如果您在結帳頁面上:

$country = WC()->customer->get_billing_country();

...或如果您正在驗證訂單:

$country = $order->get_billing_country();

那你就可以開始了:

$matches = wc_postcode_location_matcher( $postcode, $postcode_locations, 'zone_id', 'location_code', $country );
return $matches; // if empty there is no match
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!