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

はじめに

フォーム内の2つのTimeフィールドを比較し、計算された差を入力に取り込みたいですか?ご安心ください!このチュートリアルはあなたのために作られました。このチュートリアルでは、フォームの設定方法を説明し、この機能をあなたのサイトにシームレスに実装するために必要な PHP スニペットを提供します。

フォームの作成

まずは新しいフォームを作成し、フィールドを設定しましょう。このガイドではパーティールームの予約に特化したフォームをデザインします。このスニペットはヒドゥンフィールドを利用し、予約時間の合計を自動的に計算し、エントリーに追加します。この機能は特に経理チームにとって便利で、請求書発行のための分かりやすい概要を提供します。

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

フォームのセットアップでは、名前Eメール住所電話などの標準的なフィールドを含めます。さらに、部屋を選択するためのドロップダウンフィールド、予約日のための日付フィールド、予約の開始時間と終了時間を指定するための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 );

このスニペットはフォームIDに対してのみ実行されます。 731.それは、次の2つである。 時間 フィールドは、フォームのIDである。 37と38.を使用する。 round 関数では、2つの時間の差を計算し、その差を 隠しフィールド

フォームとフィールドのIDに合わせてスニペットを更新する必要があります。これらのIDの見つけ方についてヘルプが必要な場合は、こちらのチュートリアルをご覧ください

このスニペットを使って、フォームに2つの時間フィールドを追加することができます。

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

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