説明

wpforms_process_validate_payment-single アクションは、WPForms が送信されたフォームを検証する際、フィールド値がフォーマットされる前、およびエントリーが保存される前に、各 Single Item 支払いフィールドに対して実行されます。

パラメータータイプ説明
$field_idstring|int数値文字列としてのフィールド ID。
$field_submitmixed送信されたフィールド値(生のデータ)。このフィールドでは、リクエストからの金額文字列、またはフィールドに何も投稿されなかった場合は空文字列です。
$form_dataarrayフォームデータと設定。

詳細情報

WPForms_Process::process() は $form_data['fields'] の各フィールドをループし、それぞれに対して do_action( "wpforms_process_validate_{$field_type}", $field_id, $field_submit, $this->form_data ) を呼び出します。このフックは payment-single フィールドタイプのインスタンスです。フィールドが含まれるフォームが送信されるたびに、訪問者が入力したかどうかに関わらず実行されます。ファイルは includes/ にあり、Lite および Pro で実行されます。

このフックは do_action( "wpforms_process_validate_{$field_type}", $field_id, $field_submit, $form_data ) のインスタンスです。他のインスタンスとしては、Checkbox Items フィールドの wpforms_process_validate_payment-checkbox、Email フィールドの wpforms_process_validate_email があります。

フィールドクラスは、優先度 10 で 3 つの引数を持つこのフックに独自の validate() を登録します。これにより、必須フィールドのエラーが追加されます。次に、wpforms_forms_fields_payment_single_field_validate_amount フィルターが false を返さない限り、金額をチェックします。固定価格アイテムは設定価格と等しい金額を投稿する必要があり、User Defined アイテムは負の金額またはフィールドの Minimum Price 設定を下回る金額を投稿できません。

$field_submit は生の投稿文字列です。数として比較する前に wpforms_sanitize_amount() を通して実行してください。送信を拒否するには、wpforms()->obj( 'process' )->errors[ $form_data['id'] ][ $field_id ] にメッセージを書き込んでください。wpforms_process_initial_errors フィルターは、ループ後に収集されたエラーに対して実行されます。条件付きロジックは、非表示フィールドのエラーを削除するためにこれを使用します。

ソース

wpforms/includes/class-process.php

例

CSS クラス set-minimum を持つ User Defined Single Item フィールドに最小金額を強制し、金額がそれより低い場合はフィールドの下にエラーを表示して送信を停止します。

/**
 * 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 );

参考記事