AI要約
説明
初期フィールド検証が成功した後、フォームエントリー処理中に発生するアクション。
パラメーター
- $fields
- 配列 サニタイズされたエントリーフィールドの値/プロパティ。
- $entry
- 配列 元の $_POST グローバル。
- $form_data
- 配列 フォーム設定/データ。
ソース
wpforms/includes/class-process.php
詳細情報
wpforms_process アクションは、フォームエントリー処理の終盤で発生します。すべての初期フォームフィールドが検証およびサニタイズされた後に実行されます。
このフックは、アクションがエラーを返し、フォーム処理を停止する必要がある可能性がある場合に使用する必要があります(詳細は以下の例を参照してください)。
例:ユーザーアカウントが存在するかどうかを確認する、または支払いゲートウェイのデータを検証する。
このフックが発生した後でも、同じフックを使用する他のコードによってフォーム処理が停止/防止される可能性があることを覚えておいてください。
すべての検証が完了した後に発生する、類似の別のフックに関する以下の注記を参照してください。
重要事項:処理を実行していて、検証が不要な場合やエントリーIDが必要ない場合は、wpforms_process_complete を参照してください。
例
サンプルコードでは、まずフォームIDを確認してターゲットのフォームと一致するかどうかを確認しています。次に、特定のフィールド(フィールドIDで)が空かどうかを確認しています。
フォームIDと一致するようにフォームIDを 5 から変更し、フィールドIDと一致するように '4' を変更することを忘れないでください。
/**
* 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で「または」を意味する記号を使用するだけです。
たとえば、上記のコードスニペットでは、if ( absint( $form_data[ 'id' ] ) !== 5 ) を見ることができます。これは、フォームID 5 のみにスニペットを実行することを意味します。しかし、これが実行されることを望むフォームがいくつかあった場合はどうでしょうか?
いくつかのオプションがあります。各オプションを以下に示します。
1) 複数の関数を使用する
関数を複製して、関数に新しい名前を付け、フォームID番号を更新したい場合は、関数全体をコピー&ペーストし、関数の最初と最後に wpf_dev_process という名前をユニークなものに変更します。これは、関数ファイルに多くの余分な行を追加するため、最もクリーンな方法ではありませんが、読みやすく、効果的です。
2) 追加のフォームIDを追加する
最も簡単な方法は、PHPステートメント or を使用し、追加のID番号を追加することです。PHPの or の記号は || です。フォームID 7 の場合、if ( absint( $form_data[ 'id' ] ) !== 5 || $form_data[ 'id' ] ) !== 7) となります。