Descrição

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

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

Mais Informações

O WPForms_Process::process() percorre 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-single. 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 no Lite e no 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-checkbox para o campo Itens de Caixa de Seleção e wpforms_process_validate_email para o campo Email.

A classe do campo regista o seu próprio validate() neste hook com prioridade 10 e três argumentos. Adiciona o erro de campo obrigatório. Em seguida, a menos que o filtro wpforms_forms_fields_payment_single_field_validate_amount retorne falso, ele verifica o montante: um item de preço fixo deve publicar um montante igual ao preço configurado, e um item Definido pelo Utilizador não pode publicar um montante negativo ou um montante inferior à definição de Preço Mínimo do campo.

$field_submit é a string bruta publicada. Execute-a através de wpforms_sanitize_amount() antes de a comparar como um número. Para rejeitar a submissão, escreva uma mensagem em wpforms()->obj( 'process' )->errors[ $form_data['id'] ][ $field_id ]. O filtro wpforms_process_initial_errors é executado nos erros recolhidos após o loop; a Lógica Condicional usa-o para descartar erros de campos ocultos.

Origem

wpforms/includes/class-process.php

Exemplo

Aplique um montante mínimo a um campo de Item Único Definido pelo Utilizador que carrega a classe CSS set-minimum, e pare a submissão com um erro por baixo do campo quando o montante for inferior.

/**
 * Enforce a minimum amount on a User Defined Single Item field.
 *
 * @link https://wpforms.com/developers/wpforms_process_validate_payment-single/
 *
 * @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_single( $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 fields that have the CSS class "set-minimum" in the field's Advanced tab.
    $classes = explode( ' ', $form_data['fields'][ $field_id ]['css'] ?? '' );

    if ( ! in_array( 'set-minimum', $classes, true ) ) {
        return;
    }

    $minimum_amount = 5;

    if ( (float) wpforms_sanitize_amount( $field_submit ) < $minimum_amount ) {
        wpforms()->obj( 'process' )->errors[ $form_data['id'] ][ $field_id ] = sprintf(
            /* translators: %s - minimum amount. */
            esc_html__( 'Minimum amount is %s.', 'wpforms' ),
            wpforms_format_amount( $minimum_amount, true )
        );
    }
}
add_action( 'wpforms_process_validate_payment-single', 'wpf_dev_process_validate_payment_single', 10, 3 );

Artigo de Referência