同じフォームで2つの日付を比較する方法

はじめに

同じフォーム内で2つの日付を比較したいですか?小さなPHPスニペットを使えば、同じフォーム内で簡単に2つの日付を取得して比較することができます。このチュートリアルでは、同じフォーム内で2つの日付ピッカーを取得するPHPスニペットを紹介します。

フォームの作成

まず、フォームをセットアップする必要があります。フォームを作成し、2つの日付フォームフィールドを含むフィールドを追加します。

フォームを作成し、2つの日付フィールドを含むフィールドを追加します。

これらのフィールドを追加したら、AdvancedタブでDate Pickerに設定してください。

両方のフィールドで日付ピッカーを使用するように、日付フィールドを設定する。

フォームの作成にヘルプが必要な場合は、こちらのドキュメントをご覧ください

2つの日付を比較するスニペットの追加

スニペットを追加する前に、フォームに追加した日付フィールドのフォームIDとフィールドIDを確認する必要があります。

ID番号の見つけ方については、こちらのチュートリアルをご参照ください。

これらのIDを取得したら、以下のスニペットをサイトに追加することができる。

/**
 * Compare 2 dates inside the same form.
 *
 * @link  https://wpforms.com/developers/how-to-compare-two-dates-in-the-same-form/
 */

function wpf_dev_compare_dates( $fields, $entry, $form_data ) {
      
    // Optional, you can limit to specific forms. Below, we restrict output to
    // form #731.
    if ( absint( $form_data[ 'id' ] ) !== 731 ) {
        return $fields;
    }
      
	// 3 is the ID of date 1 field
	$date_1 = $fields[3][ 'unix' ]; 
	
	// 4 is the ID of date 2 field
	$date_2 = $fields[4][ 'unix' ]; 
	
	// If date 2 is earlier of the same as time 1
	if ( $date_2 <= $date_1 ) {

		
                // [ 'header' ] will display the error message above the form
                // [ 'footer' ] will display the error message under the form
		wpforms()->process->errors[ $form_data[ 'id' ] ][ 'header' ] = esc_html__( 'The pickup date should not be earlier than the order date.', 'plugin-domain' );
	}
	
}
add_action( 'wpforms_process', 'wpf_dev_compare_dates', 10, 3 );

カスタムスニペットをサイトに追加する場所や方法がわからない場合は、こちらのチュートリアルをご覧ください

このスニペットが動作する方法は、フォームID731でのみ実行され、日付フィールドID3と 日付フィールドID4を探し、それらを変数 $date_1 と $date_2 に代入して、$date_2 が $date_1 より小さいか等しいかをチェックします。

2つの日付を比較するスニペットが失敗した場合、上記のエラーメッセージが表示されます。

同じフォーム内で2つの日付を比較するのに必要なのはこれだけです!フォームに年齢制限の機能を追加したいですか?チュートリアル「日付ピッカーのフォームフィールドに年齢制限を設ける方法」をご覧ください。

アクション・リファレンス:wpforms_process