説明

最初のフィールドバリデーションが通過した後、フォーム入力処理中に発生するアクション。

パラメータ

フィールド
配列エントリーフィールドの値/プロパティをサニタイズ。
エントリー
arrayオリジナル $_POST グローバル。
フォームデータ
配列フォームの設定/データ。

ソース

wpforms/includes/class-process.php

詳細情報

について wpforms_process アクションは、フォーム入力処理の最後に実行されます。最初のフォームフィールドがすべて検証され、サニタイズされた後に実行されます。

このフックは、アクションがエラーを返してフォームの処理を停止させる必要がある場合に使用します (詳細は以下の例を参照ください)。

例:ユーザーアカウントが存在するかどうかを検証する、または支払いゲートウェイのデータを検証する。

このフックが実行された後でも、同じフックを使用する他のコードによって、フォーム処理が停止/阻止される可能性があることを覚えておいてください。

すべてのバリデーションが通過した後に発火する別の同様のフックについては、以下のメモを参照のこと。

重要な注意:処理を行う際にバリデーションが不要だったり、エントリーIDが必要だったりする場合は、wpforms_process_completeを参照してください。

コード例では、まずフォームIDをチェックして、対象となるフォームと一致していることを確認しています。次に、(フィールドIDによって)特定のフィールドが空かどうかをチェックしています。

フォームIDを 5 をフォームIDと一致させ '4' をフィールドIDと一致させる。

/**
 * Action that fires during form entry processing after initial field validation.
 *
 * @link   https://wpforms.com/developers/wpforms_process/
 *
 * @param  array  $fields    Sanitized entry field. values/properties.
 * @param  array  $entry     Original $_POST global.
 * @param  array  $form_data Form data and settings.
 */

function wpf_dev_process( $fields, $entry, $form_data ) {
     
    // Optional, you can limit to specific forms. Below, we restrict output to
    // form #5.
    if ( absint( $form_data[ 'id' ] ) !== 5 ) {
        return $fields;
    }
     
    // check the field ID 4 to see if it's empty and if it is, run the error    
    if(empty( $fields[4][ 'value' ]) ) 
        {
            // Add to global errors. This will stop form entry from being saved to the database.
            // Uncomment the line below if you need to display the error above the form.
            // wpforms()->process->errors[ $form_data[ 'id' ] ][ 'header' ] = esc_html__( 'Some error occurred.', 'plugin-domain' );    
 
            // Check the field ID 4 and show error message at the top of form and under the specific field
               wpforms()->process->errors[ $form_data[ 'id' ] ] [ '4' ] = esc_html__( 'Some error occurred.', 'plugin-domain' );
 
            // Add additional logic (what to do if error is not displayed)
        }
    }
add_action( 'wpforms_process', 'wpf_dev_process', 10, 3 );

よくあるご質問

Q:2つの異なるフォームにどのようにターゲットを絞りますか?

A:この関数を一部のフォームだけに使い、すべてのフォームには使いたくない場合は、PHPで「or」を意味する記号を使えばよい。

例えば、上のスニペットでは、次のようになります。 if ( absint( $form_data[ 'id' ] ) !== 5 )これは単に、フォームID上でそのスニペットだけを実行することを意味する。 5.しかし、これを実行したいフォームがいくつかあったとしたらどうだろう?

いくつかのオプションがあるので、以下にそれぞれのオプションを見てみよう。

1) 複数の機能を使う

関数を複製するだけなら、関数に新しい名前を付け、フォームID番号を更新します。関数全体をコピー&ペーストし、次のように名前を変更します。 wpf_dev_process を関数の最初と最後でユニークなものに置き換える。これは、関数ファイルに何行も余分な行を追加することになるので、最もクリーンな方法ではありませんが、読みやすく、効果的です。

2) 追加フォームIDの追加

最も簡単な方法は、PHPステートメントを使用することです。 or を追加し、ID番号を追加する。PHPのシンボル または||and フォームID 7の場合 if ( absint( $form_data[ 'id' ] ) !== 5 || $form_data[ 'id' ] ) !== 7).

参考記事