cari

Rumah  >  Soal Jawab  >  teks badan

Pengesahan kod pos tidak berfungsi untuk julat kod pos

Cuba buat pengesahan poskod dalam woocommerce.

Saya tidak boleh mendapatkan pertanyaan saya untuk melihat selang julat seperti 10000-000...15000-000.

Pertanyaan saya berfungsi untuk kod zip mudah (10000-000 atau 11001-001) tetapi bukan untuk julat kod zip.

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));

Saya tidak tahu bagaimana woocommerce menyimpan semua julat untuk semua kawasan penghantaran dalam pangkalan data.

Saya telah mencuba sintaks "Antara" untuk menapis lokasi medankod dan lokasikod2, tetapi saya tidak pasti sama ada itu nama medan/nama jadual yang betul atau ada cara lain untuk mencapai ini.

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));

Terima kasih

P粉449281068P粉449281068471 hari yang lalu625

membalas semua(1)saya akan balas

  • P粉872182023

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

    Saya tidak tahu sama ada ini membantu, tetapi sudah ada fungsi teras WooCommerce yang dipanggil wc_postcode_location_matcher() yang menyemak sama ada poskod yang diberikan berada dalam julat poskod.

    Anda perlu mengira $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';" );

    Maka anda memerlukan $country, jadi jika anda berada di halaman pembayaran:

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

    ...atau jika anda mengesahkan pesanan anda:

    $country = $order->get_billing_country();

    Maka anda boleh pergi:

    $matches = wc_postcode_location_matcher( $postcode, $postcode_locations, 'zone_id', 'location_code', $country );
    return $matches; // if empty there is no match

    balas
    0
  • Batalbalas