説明
最初のフィールドバリデーションが通過した後、フォーム入力処理中に発生するアクション。
パラメータ
- フィールド
- 配列エントリーフィールドの値/プロパティをサニタイズ。
- エントリー
- 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)
.