Vai al contenuto
Servizi
Prodotti
ITENHR
Home / Gravity Forms: 7 soluzioni con il codice (ID, campi, allegati, date, PDF)
Gravity Forms

Gravity Forms: 7 soluzioni con il codice (ID, campi, allegati, date, PDF)

Gravity Forms copre moltissimi casi senza scrivere codice, ma alcune esigenze ricorrenti si risolvono meglio con poche righe. Qui trovi le soluzioni che usiamo più spesso nei progetti dei clienti, riunite in un’unica pagina e aggiornate.

Dove mettere il codice: in un plugin personalizzato o nel functions.php di un tema child, mai nel tema principale (verrebbe cancellato al primo aggiornamento). Prima di metterlo online provalo su una copia del sito. In ogni snippet sostituisci gli ID del modulo e dei campi con quelli del tuo modulo: li trovi nell’editor del modulo, accanto a ogni campo.

1. Copiare l’ID della registrazione in un campo

L’ID della registrazione è unico: è comodo come numero di pratica, di ticket o di ricevuta, da mostrare nelle email e nei PDF. Questo snippet lo copia in un campo del modulo subito dopo l’invio.

// Modulo 1: copia l'ID della registrazione nel campo 25.
add_action( 'gform_after_submission_1', function ( $entry, $form ) {
	if ( '' === rgar( $entry, '25' ) ) {
		GFAPI::update_entry_field( $entry['id'], '25', $entry['id'] );
	}
}, 10, 2 );

Il campo 25 può essere un campo nascosto. Nelle notifiche inviate al momento dell’invio puoi usare direttamente il merge tag {entry_id}, senza codice.

2. Aggiornare un campo dopo la modifica di una registrazione

Utile per segnare che una pratica è stata rivista o per contare le modifiche. L’azione parte quando una registrazione viene modificata dal pannello di WordPress.

// Dopo la modifica di una registrazione, scrive un valore nel campo 5.
add_action( 'gform_after_update_entry', function ( $form, $entry_id, $original_entry ) {
	$entry = GFAPI::get_entry( $entry_id );
	if ( is_wp_error( $entry ) ) {
		return;
	}
	$entry['5'] = 'Rivista il ' . wp_date( 'd/m/Y H:i' );
	$result = GFAPI::update_entry( $entry );
	if ( is_wp_error( $result ) ) {
		error_log( 'Aggiornamento registrazione ' . $entry_id . ' non riuscito: ' . $result->get_error_message() );
	}
}, 10, 3 );

3. Cambiare la cartella degli allegati

Per impostazione predefinita Gravity Forms salva i file caricati in wp-content/uploads/gravity_forms/. Con questo filtro puoi scegliere un’altra cartella, per esempio una per ogni modulo.

// Modulo 3: salva gli allegati in wp-content/uploads/richieste/modulo-3/
add_filter( 'gform_upload_path_3', function ( $path_info, $form_id ) {
	$uploads = wp_upload_dir();
	$path_info['path'] = $uploads['basedir'] . '/richieste/modulo-' . $form_id . '/';
	$path_info['url']  = $uploads['baseurl'] . '/richieste/modulo-' . $form_id . '/';
	return $path_info;
}, 10, 2 );

Se gli allegati contengono dati personali, valuta una cartella non accessibile dal web e un download protetto.

4. Inserire l’ora corrente in un campo

  1. Aggiungi al modulo un campo (anche nascosto) chiamato «Ora corrente».
  2. In Avanzate attiva «Consenti al campo di essere popolato dinamicamente» e scrivi il nome del parametro: ora.
  3. Aggiungi questo snippet:
// Popola il parametro "ora" con l'ora del sito in formato decimale (es. 14.37).
add_filter( 'gform_field_value_ora', function () {
	return current_time( 'G.i' );
} );

Il valore usa il fuso orario impostato in WordPress: 7:01 diventa 7.01, 14:37 diventa 14.37.

5. Logica condizionale in base all’orario

Con il campo del punto 4 puoi mostrare o nascondere campi, conferme e notifiche in base all’ora. Per esempio, per mostrare un avviso fuori dall’orario d’ufficio:

  1. aggiungi un campo HTML con il messaggio «Ti richiameremo domani mattina»;
  2. attiva la logica condizionale del campo: mostra se uno qualsiasi di questi è vero: «Ora corrente» maggiore di 18, oppure «Ora corrente» minore di 9.

Lo stesso confronto funziona sulle notifiche, per esempio per avvisare un reperibile solo di notte. L’ora viene letta al caricamento della pagina, non all’invio.

6. Calcolare una data di scadenza

Esempio: l’utente sceglie una data di inizio e una durata in mesi; il modulo salva la data di scadenza in un terzo campo. Il calcolo avviene all’invio, sul server.

// Modulo 2: campo 5 = data di inizio (gg/mm/aaaa), campo 7 = mesi, campo 13 = scadenza.
add_action( 'gform_pre_submission_2', function ( $form ) {
	$inizio = DateTime::createFromFormat( 'd/m/Y', (string) rgpost( 'input_5' ) );
	$mesi   = absint( rgpost( 'input_7' ) );
	if ( $inizio && $mesi > 0 ) {
		$inizio->modify( '+' . $mesi . ' months' );
		$_POST['input_13'] = $inizio->format( 'd/m/Y' );
	}
} );

Il formato d/m/Y deve corrispondere a quello impostato nel campo data. Il campo 13 può essere nascosto oppure una data in sola lettura.

7. Inviare il PDF di Gravity PDF su un server FTP

Se usi Gravity PDF per generare un documento da ogni registrazione, puoi copiarlo in automatico su un altro server, per esempio quello del gestionale.

// Modulo 1: dopo il salvataggio del PDF lo carica via FTP.
// Le credenziali stanno in wp-config.php: RW_FTP_HOST, RW_FTP_USER, RW_FTP_PASS.
add_action( 'gfpdf_post_save_pdf', function ( $pdf_path, $filename, $settings, $entry, $form ) {
	if ( 1 !== (int) $form['id'] ) {
		return;
	}
	$conn = ftp_connect( RW_FTP_HOST, 21, 15 );
	if ( ! $conn ) {
		error_log( 'FTP: connessione non riuscita' );
		return;
	}
	if ( ftp_login( $conn, RW_FTP_USER, RW_FTP_PASS ) ) {
		ftp_pasv( $conn, true );
		if ( ! ftp_put( $conn, '/documenti/' . $filename, $pdf_path, FTP_BINARY ) ) {
			error_log( 'FTP: invio di ' . $filename . ' non riuscito' );
		}
	}
	ftp_close( $conn );
}, 10, 5 );

Se il server lo permette, usa SFTP invece di FTP: le credenziali e i documenti viaggiano cifrati.

Altre guide su Gravity Forms

Costruiamo moduli e flussi con Gravity Forms collegati a gestionali, CRM e documenti. Vedi automazione aziendale o raccontaci cosa ti serve con il percorso guidato.

Continua a leggere

Articoli correlati.

Tutti gli articoli