説明

wpforms_process_validate_name アクションは、フォーム送信時に名前フィールドの検証を実行します。これは、フィールド値がサニタイズされる前に行われます。

パラメータータイプ説明
$field_idstring|int数値文字列としてのフィールド ID。
$field_submitmixed送信されたフィールド値(生のデータ)。フィールド形式が Simple の場合は文字列、First Last および First Middle Last 形式の場合は first、middle、last キーを持つ配列です。
$form_dataarrayフォームデータ。

詳細情報

このアクションは WPForms_Process::process() 内で実行されます。wpforms_process_before フックが実行された後、メソッドは $form_data['fields'] 内のすべてのフィールドをループし、$_POST からの生の値を 1 フィールドあたり 1 回このアクションを実行します。ファイルは includes/ にあるため、フックは Lite と Pro の両方で実行されます。

このフックは do_action( "wpforms_process_validate_{$field_type}", $field_id, $field_submit, $form_data ) のインスタンスです。同じ呼び出しで、メールフィールドの場合は wpforms_process_validate_email、一行テキストフィールドの場合は wpforms_process_validate_text が実行されます。

名前フィールド自体の検証は、この同じアクションで実行されます。includes/fields/class-base.php の WPForms_Field::__construct() は、各フィールドの validate() メソッドを優先度 10 で 3 つの引数を付けて追加します。名前フィールドの場合、そのメソッドは必須設定のみを強制します。Simple 形式の場合は空でない文字列、その他の形式の場合は空でない first と last の値です。その他のチェックは、ご自由に追加してください。

送信を拒否するには、wpforms()->obj( 'process' )->errors[ $form_data['id'] ][ $field_id ] にメッセージを書き込みます。このループ中に設定されたエラーは、エントリが保存される前に処理を停止します。値は wpforms_process_format_{$field_type} が後で実行されるまでサニタイズされないため、$field_submit は信頼できない入力として扱ってください。

ソース

wpforms/includes/class-process.php

例

1 つのフォームから名前のリストを送信することをブロックします。Simple 形式(文字列)と First Last 形式(配列)の両方を処理し、フィールドにエラーを表示します。

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

参考記事