ご注意!

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

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

閉じる

フォームで2つの時間フィールドを比較する方法

はじめに

フォーム内の2つの時間フィールドを比較し、計算された差分をエントリーに記録することに興味がありますか?もう探す必要はありません!このチュートリアルはあなたのために特別に作られました。フォームの設定方法をご案内し、この機能をサイトにシームレスに実装するために必要なPHPスニペットを提供します。

フォームの作成

始めるために、新しいフォームを作成し、フィールドを設定しましょう。このガイドでは、パーティー会場の予約専用フォームを設計します。スニペットは、非表示フィールドを使用して合計予約時間を自動的に計算し、エントリーに追加します。この機能は経理チームにとって特に役立ち、請求のための簡単な概要を提供します。

フォームの作成に慣れていない場合は、こちらのドキュメントを参照してください。

フォームの設定では、名前メールアドレス住所電話番号などの標準フィールドを含めます。さらに、部屋選択のためのドロップダウンフィールド、予約日のための日付フィールド、予約の開始時間と終了時間を指定するための2つの時間フィールド、そして最後に、スニペットを使用して計算された合計時間を保存するための最終的な非表示フィールドを組み込みます。

フォームを作成し、フィールドを追加することから始めます

スニペットの追加

次に、スニペットをサイトに追加します。スニペットをどこに追加すればよいかわからない場合は、こちらのチュートリアルをご覧ください

/**
 * Compare two time fields in a form
 * 
 * @link https://wpforms.com/developers/how-to-compare-two-time-fields-in-a-form/
 */

function wpf_wpforms_update_total_field( $fields, $entry, $form_data ) {

	// Only run on my form with ID = 731
	if( 731 != $form_data[ 'id' ] ){
        return $fields;
    }
	
    // Field ID 37 is the first time field of the form
    $start_time = strtotime( $fields[37][ 'value' ] );
    
    // Field ID 38 is the second time field of the form
    $finishing_time = strtotime( $fields[38][ 'value'] );
	
    // Field ID 41 is the hidden field that will calculate the difference
    // between the two time fields and store the hours inside a hidden field of the entry
	$fields[41][ 'value' ] = round(abs($finishing_time  - $start_time)/ 3600,2) . __( ' Hours', 'text-domain');

	return $fields;
}

add_filter( 'wpforms_process_filter', 'wpf_wpforms_update_total_field', 10, 3 );

このスニペットは、フォームID731でのみ実行されます。フォームの2つの時間フィールド(ID37および38)を確認します。round関数を使用して、2つの時間の差を計算し、その差を非表示フィールドに保存します。

スニペットを、フォーム内のフォームおよびフィールドIDに合わせて更新する必要があります。これらのIDの検索方法がわからない場合は、こちらのチュートリアルをご覧ください

このスニペットを使用して、フォーム内の2つの時間フィールドを比較できるようになりました。

2つの日付も比較したいですか?同じフォームで2つの日付を比較する方法に関するチュートリアルをご覧ください。

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