Maison  >  Questions et réponses  >  le corps du texte

La validation du code postal ne fonctionne pas pour les plages de codes postaux

Essayez de créer une validation de code postal dans woocommerce.

Je n'arrive pas à faire en sorte que ma requête examine des intervalles de plage tels que 10 000-000...15 000-000.

Ma requête fonctionne pour les codes postaux simples (10000-000 ou 11001-001), mais pas pour les plages de codes postaux.

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

Je ne sais pas comment woocommerce stocke toutes les gammes pour toutes les zones d'expédition dans la base de données.

J'ai essayé la syntaxe "Entre" pour filtrer les champs locationcode et locationcode2 mais je ne sais pas si c'est le bon nom de champ/nom de table ou même s'il existe un autre moyen d'y parvenir.

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

Merci

P粉449281068P粉449281068408 Il y a quelques jours550

répondre à tous(1)je répondrai

  • P粉872182023

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

    Je ne sais pas si cela aide, mais il existe déjà une fonction principale de WooCommerce appelée wc_postcode_location_matcher() qui vérifie si un code postal donné se trouve dans une plage de codes postaux.

    Vous devez d'abord calculer $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';" );

    Ensuite, vous avez besoin de $country, donc si vous êtes sur la page de paiement :

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

    ...ou si vous vérifiez votre commande :

    $country = $order->get_billing_country();

    Alors vous êtes prêt à partir :

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

    répondre
    0
  • Annulerrépondre