Descripción

La acción wpforms_process_validate_name ejecuta la validación en el campo Nombre cuando se envía el formulario, antes de que se sanee cualquier valor del campo.

parámetrotipodescripción
$field_idstring|intID del campo como una cadena numérica.
$field_submitmixedValor del campo enviado (datos sin procesar). Una cadena cuando el formato del campo es Simple, o una matriz con las claves first, middle y last para los formatos First Last y First Middle Last.
$form_datamatrizDatos del formulario.

Más Información

La acción se ejecuta dentro de WPForms_Process::process(). Después de que se ejecutan los ganchos wpforms_process_before, el método recorre cada campo en $form_data['fields'] y ejecuta esta acción una vez por campo con el valor sin procesar de $_POST. El archivo se encuentra en includes/, por lo que el gancho se ejecuta tanto en Lite como en Pro.

Este gancho es una instancia de do_action( "wpforms_process_validate_{$field_type}", $field_id, $field_submit, $form_data ). La misma llamada ejecuta wpforms_process_validate_email para el campo Email y wpforms_process_validate_text para el campo Texto de una sola línea.

La validación propia del campo Nombre se ejecuta en esta misma acción. WPForms_Field::__construct() en includes/fields/class-base.php agrega el método validate() de cada campo en la prioridad 10 con tres argumentos. Para el campo Nombre, ese método solo aplica la configuración Requerido: una cadena no vacía para el formato Simple, o valores first y last no vacíos para los otros formatos. Otras comprobaciones son para que las agregues tú.

Para rechazar un envío, escribe un mensaje en wpforms()->obj( 'process' )->errors[ $form_data['id'] ][ $field_id ]. Cualquier error establecido durante este bucle detiene el procesamiento antes de que se guarde la entrada. Los valores no se sanean hasta que se ejecuta wpforms_process_format_{$field_type} más tarde, así que trata $field_submit como entrada no confiable.

Origen

wpforms/includes/class-process.php

Ejemplo

Bloquea una lista de nombres de enviar un formulario. Maneja tanto el formato Simple (una cadena) como los formatos First Last (una matriz) y muestra el error en el campo.

/**
 * Block specific names from submitting the form.
 *
 * @link https://wpforms.com/developers/wpforms_process_validate_name/
 *
 * @param string|int $field_id     Field ID as a numeric string.
 * @param mixed      $field_submit Submitted field value (raw data).
 * @param array      $form_data    Form data.
 */
function wpf_dev_block_name_validation( $field_id, $field_submit, $form_data ) {

    // Only run on the form with ID 143 and the Name field with ID 10. Remember to change both IDs to match your form.
    if ( absint( $form_data['id'] ) !== 143 || absint( $field_id ) !== 10 ) {
        return;
    }

    // The Simple format submits a string. First Last and First Middle Last submit an array.
    if ( is_array( $field_submit ) ) {
        $submitted_name = implode( ' ', array_filter( [ $field_submit['first'] ?? '', $field_submit['middle'] ?? '', $field_submit['last'] ?? '' ] ) );
    } else {
        $submitted_name = (string) $field_submit;
    }

    // Add the names to block.
    $blocked_names = [
        'John Doe',
        'Jane Doe',
    ];

    foreach ( $blocked_names as $name ) {
        if ( preg_match( '/\b' . preg_quote( $name, '/' ) . '\b/i', $submitted_name ) ) {
            wpforms()->obj( 'process' )->errors[ $form_data['id'] ][ $field_id ] = esc_html__( 'This name cannot be used to submit the form.', 'wpforms' );
            return;
        }
    }
}
add_action( 'wpforms_process_validate_name', 'wpf_dev_block_name_validation', 10, 3 );

Artículo de referencia