説明

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

このアクションは WPForms 1.4.0 以降で利用可能です。

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

詳細情報

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

このフックは do_action( "wpforms_process_validate_{$field_type}", $field_id, $field_submit, $form_data ) のインスタンスです。他のインスタンスとしては、Single Item フィールドの wpforms_process_validate_payment-single、標準の Checkboxes フィールドの wpforms_process_validate_checkbox があります。

フィールドクラスは、優先度 10 で 3 つの引数を持つ独自の validate() メソッドをこのフックに登録します。そのコールバックは必須フィールドのエラーを追加し、フィールド設定に存在しない選択 ID を拒否し、フィールドの選択制限を強制します。同じ優先度で後に追加されたコールバックは、それを実行し、同じエラー スロットを上書きします。

送信を拒否するには、wpforms()->obj( 'process' )->errors[ $form_data['id'] ][ $field_id ] にメッセージを書き込みます。ループ後、wpforms_process_initial_errors フィルターが収集されたエラーに対して実行されます。条件付きロジックは、非表示フィールドのエラーをドロップするためにこれを使用します。この時点では値はサニタイズされません。サニタイズは後で wpforms_process_format_{$field_type} で行われます。

ソース

wpforms/includes/class-process.php

例

1 つのフォームの 1 つの Checkbox Items フィールドで 2 つから 5 つの選択済みアイテムを要求し、カウントがその範囲外の場合はフィールドの下にエラーを表示して送信を停止します。

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

参考記事