Atenção!

Este artigo contém código PHP e destina-se a programadores. Oferecemos este código como cortesia, mas não prestamos suporte para personalizações de código ou desenvolvimento de terceiros.

Para orientação adicional, consulte o tutorial da WPBeginner sobre como adicionar código personalizado.

Ignorar

Descrição

Ação que é acionada durante o processamento da submissão do formulário, após a validação inicial dos campos ter sido bem-sucedida.

Parâmetros

$fields
array Valores/propriedades dos campos de entrada sanitizados.
$entrada
array Variável global $_POST original.
$form_data
array Configurações/dados do formulário.

Origem

wpforms/includes/class-process.php

Mais Informações

A ação wpforms_process é acionada no final do processamento da submissão do formulário. É executada após todos os campos iniciais do formulário terem sido validados e saneados.

Este hook deve ser usado quando a ação potencialmente precisa retornar um erro e interromper o processamento do formulário (consulte os Exemplos abaixo para mais detalhes).

Exemplos: verificar se uma conta de utilizador existe ou validar dados para um gateway de pagamento.

Lembre-se que o processamento do formulário ainda pode ser interrompido/impedido após a execução deste hook, por outro código que utilize o mesmo hook.

Veja a nota abaixo sobre outro hook semelhante que é acionado após a validação total ter sido bem-sucedida.

Nota importante: Se estiver a realizar o processamento e não necessitar de validação ou do ID da submissão, veja wpforms_process_complete.

Exemplos

No código de exemplo, verá que primeiro verificamos o ID do formulário para garantir que corresponde ao formulário que está a ser alvo. Depois, verificamos um campo específico (pelo ID do campo) para ver se está vazio.

Apenas lembre-se de alterar o ID do formulário de 5 para corresponder ao seu ID de formulário e alterar o '4' para corresponder ao seu 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 );

FAQ

P: Como posso direcionar isto para dois formulários diferentes?

R: Se quiser usar esta função apenas para alguns formulários, mas não para todos, precisa apenas de usar o símbolo em PHP que significa "ou".

Por exemplo, no trecho acima, pode ver if ( absint( $form_data[ 'id' ] ) !== 5 ), isto significa simplesmente que vamos executar esse trecho apenas no ID de formulário 5. Mas e se tivéssemos alguns formulários diferentes para os quais queríamos que isto fosse executado?

Existem algumas opções, vamos analisar cada opção abaixo.

1) Utilizar múltiplas funções

Se quisesse apenas duplicar a função, dê um novo nome à função e atualize o número do ID do formulário. Copiaria e colaria toda a função e depois alteraria este nome wpf_dev_process para algo único no início e no fim da função. Esta não é a forma mais limpa, pois adicionará muitas linhas extras ao seu ficheiro de funções, mas é mais fácil de ler e ainda eficaz.

2) Adicionar os IDs de formulário adicionais

A forma mais fácil é apenas usar a instrução PHP or e adicionar os números de ID adicionais. O símbolo PHP para ou é ||e o ID do formulário 7, você faria if ( absint( $form_data[ 'id' ] ) !== 5 || $form_data[ 'id' ] ) !== 7).

Artigos de Referência