ご注意!

この記事には PHP コードが含まれており、開発者を対象としています。このコードは便宜上提供していますが、コードのカスタマイズやサードパーティの開発についてはサポートを提供していません。

追加のガイダンスについては、WPBeginner の カスタムコードの追加方法に関するチュートリアル を参照してください。

閉じる

説明

初期フィールド検証が成功した後、フォームエントリー処理中に発生するアクション。

パラメーター

$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) となります。

参考記事