Descrição

A ação wpforms_process_validate_name executa a validação no campo Nome quando o formulário é submetido, antes de qualquer valor de campo ser sanitizado.

parâmetrotipodescrição
$field_idstring|intID do campo como uma string numérica.
$field_submitmixedValor do campo submetido (dados brutos). Uma string quando o formato do campo é Simples, ou um array com as chaves primeiro, meio e último para os formatos Primeiro Último e Primeiro Meio Último.
$form_datamatrizDados do formulário.

Mais Informações

A ação é executada dentro de WPForms_Process::process(). Após a execução dos hooks wpforms_process_before, o método percorre cada campo em $form_data['fields'] e executa esta ação uma vez por campo com o valor bruto de $_POST. O ficheiro encontra-se em includes/, pelo que o hook é executado tanto no Lite como no Pro.

Este hook é uma instância de do_action( "wpforms_process_validate_{$field_type}", $field_id, $field_submit, $form_data ). A mesma chamada executa wpforms_process_validate_email para o campo Email e wpforms_process_validate_text para o campo Texto de Linha Única.

A validação própria do campo Nome é executada nesta mesma ação. WPForms_Field::__construct() em includes/fields/class-base.php adiciona o método validate() de cada campo na prioridade 10 com três argumentos. Para o campo Nome, esse método apenas impõe a configuração Obrigatório: uma string não vazia para o formato Simples, ou valores de primeiro e último não vazios para os outros formatos. Outras verificações ficam ao seu critério.

Para rejeitar uma submissão, escreva uma mensagem para wpforms()->obj( 'process' )->errors[ $form_data['id'] ][ $field_id ]. Qualquer erro definido durante este loop para o processamento antes de a entrada ser guardada. Os valores não são sanitizados até que wpforms_process_format_{$field_type} seja executado mais tarde, portanto, trate $field_submit como entrada não confiável.

Origem

wpforms/includes/class-process.php

Exemplo

Bloqueia uma lista de nomes de submeter um formulário. Lida tanto com o formato Simples (uma string) como com os formatos Primeiro Último (um array) e mostra o erro no 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 );

Artigo de Referência