Achtung!

Dieser Artikel enthält PHP-Code und richtet sich an Entwickler. Wir stellen diesen Code als Service zur Verfügung, bieten jedoch keine Unterstützung für Codeanpassungen oder die Entwicklung durch Dritte.

Für zusätzliche Hilfe siehe das Tutorial von WPBeginner zum Hinzufügen von benutzerdefiniertem Code.

Schließen

So legen Sie eine Altersbeschränkung für das Datumsfeld-Auswahl-Formularfeld fest

Möchten Sie Ihrem Formular-Datumsfeld Altersbeschränkungen hinzufügen? Diese Anleitung zeigt Ihnen, wie Sie das Alter überprüfen und benutzerdefinierte Meldungen anzeigen, wenn Daten nicht Ihren Anforderungen entsprechen. Wir demonstrieren dies anhand eines Anmeldeformulars für einen Ballett-Kinderkurs, das nur Kinder zwischen 12 und 18 Jahren akzeptiert.

Einrichtung Ihres Formulars

Erstellen Sie im ersten Schritt einfach ein neues Formular und fügen Sie Ihrem Formular ein Datum / Uhrzeit-Formularfeld hinzu.

Fügen Sie Ihrem Formular ein Datums-/Uhrzeit-Formularfeld hinzu.

Hinzufügen von Altersbeschränkungs-Validierungen

Um das Alter zu überprüfen und Fehlermeldungen unter dem Formularfeld anzuzeigen, fügen Sie diesen Code zu Ihrer Website hinzu. Wenn Sie nicht sicher sind, wie Sie benutzerdefinierten Code hinzufügen, lesen Sie bitte unsere Anleitung zum Hinzufügen von Code-Snippets.

/**
 * Display an error message on submission of the form if the date doesn't fall within the guidelines.
 *
 * @link  https://wpforms.com/developers/how-to-provide-an-age-restriction-on-the-datepicker-form-field/ *
 */
 
function wpf_dev_process( $fields, $entry, $form_data ) {
  
    // Optional, you can limit to specific forms. Below, we restrict output to
    // form #1000.
    if ( absint( $form_data[ 'id' ] ) !== 1000 ) {
        return $fields;
    }
      
    if ( isset( $fields[25][ 'value' ] ) && !empty( $fields[25][ 'value' ] ) ) {
        $timestamp = strtotime( $fields[25][ 'value' ] );
        if ($timestamp === false) {
            // Invalid date format
            wpforms()->process->errors[ $form_data[ 'id' ] ][ '25' ] = esc_html__( 'Invalid date format', 'plugin-domain' );
        } else {
            $birth_year = date('Y', $timestamp);
            $current_year = date('Y');
            $age = $current_year - $birth_year;
             
            if ($age < 12 || $age > 18) {
                // Show an error message at the top of the form and under the specific field
                wpforms()->process->errors[ $form_data[ 'id' ] ][ '25' ] = esc_html__( 'Minimum age requirement is 12 and maximum age requirement is 18', 'plugin-domain' );
            }
        }
    } else {
        // Date field is empty
        wpforms()->process->errors[ $form_data[ 'id' ] ][ '25' ] = esc_html__( 'Date field is required', 'plugin-domain' );
    }
     
    return $fields;
}
add_action( 'wpforms_process', 'wpf_dev_process', 10, 3 );

Stellen Sie sicher, dass Sie die Formular-ID (1000) und die Feld-ID (25) aktualisieren, damit sie zu Ihrem eigenen Formular passen. Wenn Sie Hilfe beim Auffinden dieser IDs benötigen, lesen Sie unsere Anleitung zum Auffinden von Formular- und Feld-IDs.

Mit diesem Code-Snippet wird eine Meldung unter dem Feld angezeigt, wenn das Senden-Button geklickt wird und die Daten die Altersbeschränkung nicht erfüllen.

Mit diesem alternativen Code wird die Meldung zur Altersbeschränkung angezeigt, sobald der Senden-Button geklickt wurde.

Altersbeschränkung mit Wiederholungsfeldern verwenden

Wenn sich Ihr Datumsfeld innerhalb eines Wiederholungsfeldes befindet, verwenden Sie diese modifizierte Version:

/**
 * Age restriction validation for Repeater fields
 */
function wpf_dev_process( $fields, $entry, $form_data ) {
    if ( absint( $form_data[ 'id' ] ) !== 1000 ) {
        return $fields;
    }

    foreach ( $fields as $field_id => $field ) {
        if ( preg_match( '/^25(_\d+)?$/', $field_id ) ) {
            if ( isset( $field[ 'value' ] ) && !empty( $field[ 'value' ] ) ) {
                $timestamp = strtotime( $field[ 'value' ] );
                if ( $timestamp === false ) {
                    wpforms()->process->errors[ $form_data[ 'id' ] ][ $field_id ] = esc_html__( 'Invalid date format', 'plugin-domain' );
                } else {
                    $birth_year = date('Y', $timestamp);
                    $current_year = date('Y');
                    $age = $current_year - $birth_year;
                    if ( $age < 12 || $age > 18 ) {
                        wpforms()->process->errors[ $form_data[ 'id' ] ][ $field_id ] = esc_html__( 'Minimum age requirement is 12 and maximum age requirement is 18', 'plugin-domain' );
                    }
                }
            }
        }
    }
    return $fields;
}
add_action( 'wpforms_process', 'wpf_dev_process', 10, 3 );

Verwendung des exakten Datumsvergleichs

Für eine genauere Altersüberprüfung, z. B. um sicherzustellen, dass Benutzer genau 18 Jahre oder älter sind:

/**
 * Check if the user is 18 years or older using exact date comparison
 */
function wpf_dev_compare_dates( $fields, $entry, $form_data ) {
    if ( absint( $form_data[ 'id' ] ) !== 1000 ) {
        return $fields;
    }

    $age = 18;
    $date_1 = $fields[25][ 'unix' ];
    
    if( is_string( $date_1 ) ) {
        $date_1 = strtotime( $date_1 );
    }

    if( time() - $date_1 < $age * 31536000 )
        wpforms()->process->errors[ $form_data[ 'id' ] ][ 'header' ] = esc_html__( 'Apologies, you need to be 18 or older to submit this form.', 'plugin-domain' );
}
add_action( 'wpforms_process', 'wpf_dev_compare_dates', 10, 3 );

Und das ist alles! Sie haben die Altersbeschränkung für Ihr Datumsfeld in Ihrem Formular erfolgreich implementiert. Möchten Sie als Nächstes das Datumsfeld auf andere Weise anpassen? Sehen Sie sich unser Tutorial zu Anpassen der Optionen für Datums-/Uhrzeitfelder für weitere Details an.

Referenzaktionen

wpforms_process