Cómo proporcionar una restricción de edad en el campo de formulario selector de fecha

¿Quieres añadir restricciones de edad al selector de fechas de tu formulario? Esta guía le mostrará cómo validar las edades y mostrar mensajes personalizados cuando las fechas no cumplan sus requisitos. Lo demostraremos utilizando un formulario de inscripción a clases de ballet para niños que solo acepta niños de entre 12 y 18 años.

Configuración del formulario

En el primer paso, sólo tiene que crear un nuevo formulario y añadir un campo Fecha / Hora a su formulario.

Añada el campo Fecha/Hora a su formulario.

Añadir validación de restricción de edad

Para validar edades y mostrar mensajes de error bajo el campo del formulario, añade este código a tu sitio. Si no estás seguro de cómo añadir código personalizado, consulta nuestra guía sobre cómo añadir fragmentos de código.

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

Asegúrese de actualizar el ID de formulario (1000) y el ID de campo (25) para que coincidan con su propio formulario. Si necesitas ayuda para encontrar estos ID, consulta nuestra guía para encontrar ID de formulario y de campo.

Con este fragmento de código, si las fechas no cumplen la restricción de edad, aparecerá un mensaje debajo del campo cuando se pulse el botón Enviar.

Con este código alternativo, el mensaje de restricción de edad se mostrará una vez que se haya pulsado el botón Enviar.

Uso de la restricción de edad con campos repetidores

Si su campo de fecha está dentro de un campo Repetidor, utilice esta versión modificada:

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

Uso de la comparación de fechas exactas

Para una verificación de la edad más precisa, como asegurarse de que los usuarios tienen exactamente 18 años o más:

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

Y ya está. Ha implementado con éxito la restricción de edad en su formulario para su campo selector de fecha. A continuación, ¿le gustaría personalizar el campo de selección de fecha de otras formas? Consulte nuestro tutorial sobre la personalización de las opciones del campo de fecha y hora para obtener más detalles.

Acciones de referencia

wpforms_process