Descrição

A ação wpforms_process_validate_payment-checkbox é disparada para cada campo de pagamento Checkbox Items enquanto o WPForms valida um formulário submetido, antes que qualquer valor de campo seja formatado e antes que a entrada seja guardada.

Esta ação está disponível desde o WPForms 1.4.0.

parâmetrotipodescrição
$field_idstring|intID do campo como uma string numérica.
$field_submitmistoValor do campo submetido (dados brutos). Para este campo, é o array de IDs de escolhas selecionadas a partir do pedido, ou uma string vazia quando nada foi publicado para o campo.
$form_datamatrizDados e configurações do formulário.

Mais Informações

WPForms_Process::process() itera sobre cada campo em $form_data['fields'] e chama do_action( "wpforms_process_validate_{$field_type}", $field_id, $field_submit, $this->form_data ) para cada um. Este hook é a instância para o tipo de campo payment-checkbox. Ele é disparado em cada submissão de um formulário que contém o campo, quer o visitante o tenha preenchido ou não. O ficheiro encontra-se em includes/, pelo que é disparado em Lite e Pro.

Este hook é uma instância de do_action( "wpforms_process_validate_{$field_type}", $field_id, $field_submit, $form_data ). Outras instâncias são wpforms_process_validate_payment-single para o campo Item Único e wpforms_process_validate_checkbox para o campo padrão Checkboxes.

A classe do campo regista o seu próprio método validate() neste hook com prioridade 10 e três argumentos. Essa callback adiciona o erro de campo obrigatório, rejeita IDs de escolhas que não existem nas definições do campo e impõe o limite de escolhas do campo. Uma callback adicionada posteriormente com a mesma prioridade é executada depois dela e sobrescreve o mesmo slot de erro.

Para rejeitar a submissão, escreva uma mensagem em wpforms()->obj( 'process' )->errors[ $form_data['id'] ][ $field_id ]. Após o loop, o filtro wpforms_process_initial_errors é executado sobre os erros recolhidos; a Lógica Condicional usa-o para descartar erros de campos ocultos. Os valores não são sanitizados neste ponto. A sanitização acontece mais tarde em wpforms_process_format_{$field_type}.

Origem

wpforms/includes/class-process.php

Exemplo

Exigir entre dois e cinco itens selecionados num campo Checkbox Items num formulário, e parar a submissão com um erro abaixo do campo quando a contagem está fora desse intervalo.

/**
 * Require between two and five checked items in a Checkbox Items field.
 *
 * @link https://wpforms.com/developers/wpforms_process_validate_payment-checkbox/
 *
 * @param string|int $field_id     Field ID.
 * @param mixed      $field_submit Submitted field value (raw data).
 * @param array      $form_data    Form data and settings.
 */
function wpf_dev_process_validate_payment_checkbox( $field_id, $field_submit, $form_data ) {

    // Only run on my form with ID = 143, remember to change this to match your form ID.
    if ( absint( $form_data['id'] ) !== 143 ) {
        return;
    }

    // Only run on the Checkbox Items field with ID = 21, remember to change this to match your field ID.
    if ( absint( $field_id ) !== 21 ) {
        return;
    }

    $min   = 2;
    $max   = 5;
    $count = is_array( $field_submit ) ? count( $field_submit ) : 0;

    if ( $count < $min ) {
        wpforms()->obj( 'process' )->errors[ $form_data['id'] ][ $field_id ] = sprintf(
            /* translators: %d - minimum number of choices. */
            esc_html__( 'Please select a minimum of %d choices.', 'wpforms' ),
            $min
        );

        return;
    }

    if ( $count > $max ) {
        wpforms()->obj( 'process' )->errors[ $form_data['id'] ][ $field_id ] = sprintf(
            /* translators: %d - maximum number of choices. */
            esc_html__( 'Please select a maximum of %d choices.', 'wpforms' ),
            $max
        );
    }
}
add_action( 'wpforms_process_validate_payment-checkbox', 'wpf_dev_process_validate_payment_checkbox', 10, 3 );

Artigo de Referência