Attenzione!

Questo articolo contiene codice PHP ed è destinato agli sviluppatori. Offriamo questo codice come cortesia, ma non forniamo supporto per le personalizzazioni del codice o per lo sviluppo di terze parti.

Per maggiori informazioni, consultare il tutorial di WPBeginner sull'aggiunta di codice personalizzato.

Congedo

Come aggiungere la convalida del campo del codice postale nei vostri moduli

Volete aggiungere la convalida del campo del codice postale ai vostri WPForm? Per impostazione predefinita, quando si usa il campo Indirizzo, c'è solo un posto per inserire un codice postale insieme all'indirizzo. Tuttavia, in questo tutorial vi mostreremo come potete creare un campo che cercherà i codici di avviamento postale utilizzabili e fallirà l'invio del modulo se il codice di avviamento postale non rientra nella vostra area di servizio preferita.

Creazione del modulo

Inizieremo creando un nuovo modulo e aggiungendo tutti i campi obbligatori.

iniziare creando un nuovo modulo e aggiungendo i campi. assicurarsi di includere almeno un campo di testo a riga singola per la convalida del campo codice postale.

Aggiungeremo un campo di testo a riga singola che avrà una maschera di input che fungerà da campo Codice postale. In questo modo, quando il modulo viene inviato, lo snippet prenderà il valore inserito in questo campo e lo confronterà con un elenco di codici di avviamento postale presenti nella nostra area di servizio. Se il confronto non va a buon fine, l'utente vedrà un messaggio che indica che al momento non serviamo quell'area.

Se avete bisogno di aiuto per la creazione di moduli, consultate questa utile guida.

Utilizzo della maschera di immissione

Poiché vogliamo che il nostro campo del modulo Testo a riga singola appaia come un campo di codice postale standard, aggiungeremo una maschera di input a questo campo. A tale scopo, fare clic sul campo e spostarsi nella scheda Avanzate. Nel campo Maschera di input, inserire 99999. Ciò significa che questo campo accetterà solo 5 cifre numeriche.

Per ulteriori informazioni sulle maschere di input in WPForms, consultare questo tutorial per ulteriori esempi.

nel campo del modulo di testo a riga singola, fare clic sulla scheda Avanzate e immettere 99999 per creare il formato del campo del codice postale. questa maschera di immissione accetta solo 5 cifre numeriche.

Applicazione della convalida del codice postale (solo su un singolo modulo)

Ora è il momento di aggiungere il nostro snippet. Questo primo esempio aggiungerà la convalida del codice postale solo a un modulo specifico. Se hai bisogno di assistenza su come e dove aggiungere gli snippet, consulta questa documentazione.

/**
* Add zip code field validation.
*
* @link https://wpforms.com/developers/how-to-add-zip-code-field-validation-on-your-forms/
*/
 
function wpf_dev_validate_zip_code( $fields, $entry, $form_data ) {
 
    // Optional, you can limit to specific forms. Below, we restrict output to
    // form #3382.
 
    if ( absint( $form_data[ 'id' ] ) !== 3382 ) {
        return $fields;
    }
 
    // Get the value of the zip code field the user entered
    // Field ID for zip code field is '6'
    $zip_code = $fields[6][ 'value' ];
 
    // Zip code array, each zip code separated by a comma
    $zip_code_list = array(
    '85224',
    '85225',
    '85226',
    '85233',
    '85234',
    '85244',
    '85246',
    '85248',
    '85249',
    '85286',
    '85295',
    '85296',
    '85297',
    '85298',
    '85299'
    );
 
    if (!in_array($zip_code, $zip_code_list)) {
 
        // Check the field ID 75 and show an error message at the top of the form and under the specific field
        wpforms()->process->errors[ $form_data[ 'id' ] ]['6'] = esc_html__( 'We apologize for the inconvenience, but we currently do not service your area. Please check back in the future.', 'plugin-domain' );
    }
     
}
add_action( 'wpforms_process', 'wpf_dev_validate_zip_code', 10, 3 );

Nota: in questo esempio, lo snippet è limitato a un singolo modulo. Controlla l'ID del modulo prima dell'esecuzione e convalida solo il codice postale su quel modulo. Se desideri applicare la stessa convalida a più moduli senza duplicare lo snippet, puoi utilizzare l'esempio alternativo riportato più avanti in questa pagina.

Vediamo di scomporre questo snippet per spiegare ogni parte. La prima sezione dello snippet cerca di vedere se l'ID del modulo che lo snippet sta guardando corrisponde all'ID del modulo che abbiamo specificato nello snippet. Per questo esempio, lo snippet verrà eseguito solo sull'ID 3382 del modulo.

La riga successiva dello snippet cerca l'ID del campo 6 e prende il valore inserito nel modulo. Una volta ottenuto questo valore, confronterà il valore inserito con l'elenco dei codici di avviamento postale che abbiamo inserito nell'array $zip_code_list. È necessario aggiornare l'ID del modulo, l'ID del campo e aggiornare i codici di avviamento postale visualizzati in questo array per farli corrispondere ai propri codici di avviamento postale.

Per assistenza nella ricerca dei numeri di ID del modulo e del campo, consultare il nostro tutorial su Come individuare l'ID del modulo e l'ID del campo.

Una volta apportate le modifiche allo snippet, noterai che il modulo non elaborerà l'invio se il codice postale inserito non è presente nell'array $zip_code_list.

il modulo non viene inviato se la convalida del campo codice postale non riesce.

Applicazione della convalida del codice postale (su più moduli)

In alcuni casi, potresti voler applicare la stessa convalida del codice postale a diversi moduli senza creare uno snippet separato per ciascuno di essi. Invece di controllare un ID modulo e un ID campo specifici, puoi utilizzare uno snippet alternativo che cerca nel modulo inviato un campo la cui etichetta corrisponda a un elenco di etichette di codici postali e quindi convalida quel campo.

/**
 * Add zip code field validation across all forms, regardless of field ID.
 *
 * @link https://wpforms.com/developers/how-to-add-zip-code-field-validation-on-your-forms/
 */
function wpf_dev_validate_zip_code_all_forms( $fields, $entry, $form_data ) {

    // Define accepted labels for ZIP code fields.
    $zip_labels = array( 'zip', 'zip code', 'postal code' );

    // Find the field ID by label.
    $zip_field_id = false;
    foreach ( $form_data['fields'] as $field_id => $field ) {
        if ( isset( $field['label'] ) && in_array( strtolower( trim( $field['label'] ) ), $zip_labels, true ) ) {
            $zip_field_id = $field_id;
            break;
        }
    }

    // If no matching field is found, skip validation.
    if ( ! $zip_field_id || empty( $fields[ $zip_field_id ]['value'] ) ) {
        return $fields;
    }

    // Get the value entered by the user.
    $zip_code = trim( $fields[ $zip_field_id ]['value'] );

    // Allowed ZIP codes.
    $zip_code_list = array(
        '85224',
        '85225',
        '85226',
        '85233',
        '85234',
        '85244',
        '85246',
        '85248',
        '85249',
        '85286',
        '85295',
        '85296',
        '85297',
        '85298',
        '85299'
    );

    // Validate entered ZIP code.
    if ( ! in_array( $zip_code, $zip_code_list, true ) ) {
        wpforms()->process->errors[ $form_data['id'] ][ $zip_field_id ] = esc_html__(
            'We apologize for the inconvenience, but we currently do not service your area. Please check back in the future.',
            'plugin-domain'
        );
    }

    return $fields;
}
add_action( 'wpforms_process', 'wpf_dev_validate_zip_code_all_forms', 10, 3 );

Questo snippet alternativo non dipende da un ID campo fisso. Esegue un ciclo attraverso i campi del modulo, esamina l'etichetta di ciascun campo e cerca di trovare un'etichetta che corrisponda a uno dei valori nel $zip_labels array, come ad esempio zip, zip code, o postal codeQuando trova una corrispondenza, considera quel campo come il campo del codice postale e confronta il suo valore con lo stesso elenco di codici postali consentiti.

Poiché questo snippet utilizza etichette, è importante che i campi del codice postale nei moduli utilizzino etichette che corrispondano a uno dei valori in $zip_labelsSe i tuoi moduli utilizzano una formulazione diversa, puoi modificare il $zip_labels array nello snippet e aggiungi il tuo testo di etichetta in modo che il codice venga eseguito solo sui campi desiderati.

Non è necessario modificare alcun ID modulo o ID campo in questo snippet. Troverà automaticamente il campo corretto su qualsiasi modulo che abbia un'etichetta corrispondente a uno dei valori in $zip_labels.

Questo è tutto ciò che serve per aggiungere la convalida del campo del codice postale a un campo di testo a riga singola. Volete anche limitare i Paesi visualizzati quando utilizzate il campo Indirizzo e il completamento automatico? Date un'occhiata al nostro tutorial su Come limitare il completamento automatico dell'indirizzo a un paese specifico.

Riferimento azione: wpforms_process