首頁  >  問答  >  主體

郵遞區號驗證不適用於郵遞區號範圍

嘗試在 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粉449281068P粉449281068408 天前552

全部回覆(1)我來回復

  • P粉872182023

    P粉8721820232023-09-09 00:12:19

    我不知道這是否有幫助,但已經有一個名為 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

    回覆
    0
  • 取消回覆