¡Atención!

Este artículo contiene código PHP y está destinado a desarrolladores. Ofrecemos este código como cortesía, pero no proporcionamos soporte para personalizaciones de código o desarrollo de terceros.

Para obtener ayuda adicional, consulta el tutorial de WPBeginner sobre cómo añadir código personalizado.

Descartar

Descripción

Acción que se dispara durante el procesamiento de entradas del formulario, después de que la validación inicial de los campos haya sido superada.

Parámetros

$fields
array Valores/propiedades de los campos de entrada saneados.
$entry
array Global $_POST original.
$form_data
array Configuración/datos del formulario.

Origen

wpforms/includes/class-process.php

Más Información

La acción wpforms_process se dispara hacia el final del procesamiento de entradas del formulario. Se ejecuta después de que todos los campos iniciales del formulario hayan sido validados y saneados.

Este hook debe usarse cuando la acción potencialmente necesita devolver un error y detener el procesamiento del formulario (ver Ejemplos a continuación para más detalles).

Ejemplos: verificar si existe una cuenta de usuario o validar datos para una pasarela de pago.

Recuerda que el procesamiento del formulario aún puede ser detenido/prevenido después de que este hook se dispare, por otro código que use el mismo hook.

Consulta la nota a continuación sobre otro hook similar que se dispara después de que se superan todas las validaciones.

Nota importante: Si estás realizando el procesamiento y no necesitas validación o necesitas el ID de la entrada, consulta wpforms_process_complete.

Ejemplos

En el código de ejemplo, primero comprobaremos el ID del formulario para asegurarnos de que coincide con el formulario que se está dirigiendo. Luego, comprobaremos un campo específico (por el ID del campo) para ver si está vacío.

Solo recuerda cambiar el ID del formulario de 5 para que coincida con tu ID de formulario y cambiar el '4' para que coincida con tu ID de campo.

/**
 * Action that fires during form entry processing after initial field validation.
 *
 * @link   https://wpforms.com/developers/wpforms_process/
 *
 * @param  array  $fields    Sanitized entry field. values/properties.
 * @param  array  $entry     Original $_POST global.
 * @param  array  $form_data Form data and settings.
 */

function wpf_dev_process( $fields, $entry, $form_data ) {
     
    // Optional, you can limit to specific forms. Below, we restrict output to
    // form #5.
    if ( absint( $form_data[ 'id' ] ) !== 5 ) {
        return $fields;
    }
     
    // check the field ID 4 to see if it's empty and if it is, run the error    
    if(empty( $fields[4][ 'value' ]) ) 
        {
            // Add to global errors. This will stop form entry from being saved to the database.
            // Uncomment the line below if you need to display the error above the form.
            // wpforms()->process->errors[ $form_data[ 'id' ] ][ 'header' ] = esc_html__( 'Some error occurred.', 'plugin-domain' );    
 
            // Check the field ID 4 and show error message at the top of form and under the specific field
               wpforms()->process->errors[ $form_data[ 'id' ] ] [ '4' ] = esc_html__( 'Some error occurred.', 'plugin-domain' );
 
            // Add additional logic (what to do if error is not displayed)
        }
    }
add_action( 'wpforms_process', 'wpf_dev_process', 10, 3 );

Preguntas frecuentes

P: ¿Cómo podría dirigir esto a dos formularios diferentes?

R: Si deseas usar esta función solo para algunos formularios pero no para todos, solo necesitas usar el símbolo en PHP que significa "o".

Por ejemplo, en el fragmento anterior, puedes ver if ( absint( $form_data[ 'id' ] ) !== 5 ), esto simplemente significa que solo ejecutaremos ese fragmento en el ID de formulario 5. Pero, ¿qué pasa si teníamos algunos formularios diferentes en los que queríamos que esto se ejecutara?

Hay un par de opciones, veamos cada opción a continuación.

1) Usando múltiples funciones

Si quisieras simplemente duplicar la función, dale un nuevo nombre a la función y actualiza el número del ID del formulario. Copiarías y pegarías toda la función y luego cambiarías este nombre wpf_dev_process por algo único al principio y al final de la función. Esta no es la forma más limpia, ya que agregará muchas líneas adicionales a tu archivo de funciones, pero es más fácil de leer y sigue siendo efectiva.

2) Añadiendo los IDs de formulario adicionales

La forma más fácil es simplemente usar la declaración PHP or y agregar los números de ID adicionales. El símbolo PHP para o es ||. Por lo tanto, si quisieras que esto se ejecutara en el formulario ID 5 o en el formulario ID 7, tendrías if ( absint( $form_data[ 'id' ] ) !== 5 || $form_data[ 'id' ] ) !== 7).

Artículos de Referencia