Come confrontare due campi temporali in un modulo

Introduzione

Siete interessati a confrontare due campi temporali all'interno del vostro modulo e a catturare la differenza calcolata nel vostro inserimento? Non cercate oltre! Questo tutorial è fatto su misura per voi. Vi guideremo attraverso il processo di configurazione del vostro modulo e vi forniremo lo snippet PHP necessario per implementare senza problemi questa funzionalità sul vostro sito.

Creazione del modulo

Per iniziare, creiamo un nuovo modulo e configuriamo i nostri campi. In questa guida, progetteremo un modulo specifico per la prenotazione di sale per feste. Il nostro snippet utilizzerà un campo nascosto per calcolare automaticamente e aggiungere alla voce il totale delle ore prenotate. Questa funzione è particolarmente utile per il team di contabilità, in quanto fornisce una panoramica immediata per la fatturazione.

Se non si ha familiarità con la creazione di moduli, si può fare riferimento a questa documentazione per ottenere assistenza.

Nella configurazione del nostro modulo, includeremo campi standard come Nome, Email, Indirizzo e Telefono. Inoltre, incorporeremo un campo a tendina per la selezione della stanza, un campo Data per la data di prenotazione, due campi Ora per specificare l'ora di inizio e di fine della prenotazione e, infine, un campo nascosto conclusivo per memorizzare le ore totali calcolate con il nostro snippet.

iniziare creando il modulo e aggiungendo i campi

Aggiunta dello snippet

Successivamente, aggiungeremo lo snippet al nostro sito. Se non sapete dove o come aggiungere gli snippet, consultate questo tutorial.

/**
 * 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 );

Questo snippet verrà eseguito solo sull'ID del modulo 731. Esaminerà i due Tempo campi del modulo, che sono gli ID 37 e 38. Utilizzando il round calcolerà la differenza tra i due tempi e la memorizzerà all'interno della cartella Campo nascosto

È necessario aggiornare lo snippet in modo che corrisponda agli ID del modulo e del campo che avete nel vostro modulo. Se si ha bisogno di aiuto per trovare questi ID, consultare questo tutorial.

Utilizzando questo snippet è possibile creare due campi temporali in un form

Volete anche confrontare due date? Date un'occhiata al nostro tutorial su Come confrontare due date nello stesso modulo.

Riferimento azione: wpforms_process