Aufgepasst!

Dieser Artikel enthält PHP-Code und ist für Entwickler gedacht. Wir stellen diesen Code aus Höflichkeit zur Verfügung, bieten aber keinen Support für Code-Anpassungen oder Entwicklungen von Drittanbietern.

Eine zusätzliche Anleitung finden Sie im WPBeginner-Tutorial zum Hinzufügen von benutzerdefiniertem Code.

Ablehnen

Hinzufügen der Validierung von Postleitzahlenfeldern zu Ihren Formularen

Möchten Sie die Validierung des Postleitzahlenfeldes zu Ihren WPForms hinzufügen? Standardmäßig gibt es bei der Verwendung des Adressfeldes nur einen Platz, um eine Postleitzahl zusammen mit der Adresse einzugeben. In diesem Tutorial zeigen wir Ihnen jedoch, wie Sie ein Feld erstellen können, das Ihre zugänglichen Postleitzahlen durchsucht und das Absenden des Formulars fehlschlägt, wenn die Postleitzahl nicht in Ihrem bevorzugten Servicebereich liegt.

Erstellen des Formulars

Wir beginnen mit der Erstellung eines neuen Formulars und fügen alle erforderlichen Felder hinzu.

Erstellen Sie zunächst ein neues Formular und fügen Sie Ihre Felder hinzu. Achten Sie darauf, dass Sie mindestens 1 einzeiliges Textfeld für die Validierung Ihrer Postleitzahl einfügen.

Wir fügen ein einzeiliges Textformularfeld mit einer Eingabemaske hinzu, die als unser Postleitzahlenfeld dient. Wenn das Formular abgeschickt wird, vergleicht das Snippet den in dieses Feld eingegebenen Wert mit einer Liste von Postleitzahlen, die in unserem Servicegebiet liegen. Wenn der Vergleich fehlschlägt, wird dem Benutzer eine Meldung angezeigt, die besagt, dass wir dieses Gebiet zur Zeit nicht bedienen.

Wenn Sie Hilfe bei der Erstellung von Formularen benötigen, sehen Sie sich bitte diesen nützlichen Leitfaden an.

Verwendung der Eingabemaske

Da unser einzeiliges Textformularfeld wie ein Standard-Postleitzahlenfeld aussehen soll, fügen wir diesem Feld eine Eingabemaske hinzu. Klicken Sie dazu auf das Feld und wechseln Sie auf die Registerkarte Erweitert. Geben Sie im Feld Eingabemaske den Wert 99999 ein. Das bedeutet, dass dieses Feld nur 5 numerische Ziffern akzeptiert.

Weitere Informationen über Eingabemasken in WPForms finden Sie in diesem Tutorial mit weiteren Beispielen.

Klicken Sie in Ihrem einzeiligen Textformularfeld auf die Registerkarte Erweitert und geben Sie 99999 ein, um das Format des Postleitzahlenfeldes zu erstellen. Diese Eingabemaske akzeptiert nur 5 numerische Ziffern.

Postleitzahlvalidierung anwenden (nur auf einem einzigen Formular)

Jetzt ist es an der Zeit, unseren Snippet hinzuzufügen. Dieses erste Beispiel fügt die Postleitzahlvalidierung nur zu einem bestimmten Formular hinzu. Wenn Sie Hilfe dazu benötigen, wie und wo Sie Snippets hinzufügen können, lesen Sie bitte diese Dokumentation.

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

Hinweis: In diesem Beispiel ist der Ausschnitt auf ein einzelnes Formular beschränkt. Er überprüft vor der Ausführung die Formular-ID und validiert nur die Postleitzahl in diesem Formular. Wenn Sie dieselbe Validierung auf mehrere Formulare anwenden möchten, ohne den Ausschnitt zu duplizieren, können Sie das alternative Beispiel weiter unten auf dieser Seite verwenden.

Schlüsseln wir dieses Snippet auf, um jeden Teil zu erklären. Im ersten Abschnitt des Snippets wird geprüft, ob die Formular-ID, die das Snippet untersucht, mit der Formular-ID übereinstimmt, die wir im Snippet angegeben haben. In diesem Beispiel wird dieses Snippet nur für die Formular-ID 3382 ausgeführt.

In der nächsten Zeile des Schnipsels wird nach der Feld-ID 6 gesucht und der Wert, der in das Formular eingegeben wurde, abgefragt. Sobald er diesen Wert hat, vergleicht er den eingegebenen Wert mit der Liste der Postleitzahlen, die wir in das Array $zip_code_list eingegeben haben. Sie müssen die Formular-ID und die Feld-ID aktualisieren und die Postleitzahlen, die in diesem Array angezeigt werden, mit Ihren eigenen Postleitzahlen abgleichen.

Wenn Sie Hilfe bei der Suche nach Ihren Formular- und Feld-ID-Nummern benötigen, lesen Sie bitte unsere Anleitung zum Auffinden von Formular- und Feld-ID-Nummern.

Nachdem Sie Ihre Anpassungen am Snippet vorgenommen haben, werden Sie feststellen, dass das Formular die Formularübermittlung nicht verarbeitet, wenn die eingegebene Postleitzahl nicht in der Array-Liste $zip_code_list gefunden wird.

das Formular wird nicht abgeschickt, wenn die Überprüfung des Postleitzahlenfeldes fehlschlägt

Anwendung der Postleitzahlvalidierung (auf mehreren Formularen)

In einigen Fällen möchten Sie möglicherweise dieselbe Postleitzahlvalidierung auf mehrere verschiedene Formulare anwenden, ohne für jedes Formular einen separaten Snippet zu erstellen. Anstatt eine bestimmte Formular-ID und Feld-ID zu überprüfen, können Sie einen alternativen Snippet verwenden, der das übermittelte Formular nach einem Feld durchsucht, dessen Bezeichnung mit einer Liste von Postleitzahlbezeichnungen übereinstimmt, und dieses Feld dann validiert.

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

Dieser alternative Ausschnitt hängt nicht von einer festen Feld-ID ab. Er durchläuft die Felder des Formulars, überprüft die Beschriftung jedes Feldes und versucht, eine Beschriftung zu finden, die mit einem der Werte in der $zip_labels Array, wie z. B. zip, zip code, oder postal codeWenn es eine Übereinstimmung findet, behandelt es dieses Feld als Postleitzahlenfeld und vergleicht seinen Wert mit derselben Liste zulässiger Postleitzahlen.

Da dieser Ausschnitt Labels verwendet, ist es wichtig, dass die Postleitzahlfelder in Ihren Formularen Labels verwenden, die mit einem der Werte in $zip_labelsWenn Ihre Formulare andere Formulierungen verwenden, können Sie die $zip_labels Array im Snippet und fügen Sie Ihren eigenen Beschriftungstext hinzu, damit der Code nur auf den Feldern ausgeführt wird, die Sie erwarten.

Sie müssen in diesem Snippet keine Formular-ID oder Feld-ID ändern. Es findet automatisch das richtige Feld in jedem Formular, dessen Bezeichnung mit einem der Werte in $zip_labels.

Und das ist alles, was Sie brauchen, um einem einzeiligen Textfeld die Überprüfung der Postleitzahl hinzuzufügen. Möchten Sie auch die Länder einschränken, die bei der Verwendung des Adressfelds und der automatischen Vervollständigung angezeigt werden? Werfen Sie einen Blick auf unser Tutorial über die Beschränkung der automatischen Vervollständigung von Adressen auf ein bestimmtes Land.

Referenz der Aktion: wpforms_process