• Author:

WP Transient

Transient, cosa sono e come si usano?

Con le funzioni transient su WordPress è possibile salvare temporaneamente dei dati nel database ( in particolare nella tabella {$wpdb->prefix}options ).
Usando questo metodo è possibile definire dei valori , con chiave arbitraria, specificando  un periodo di validità.


La funzione che ci consente di salvare un parametro temporaneo nel database è :

set_transient( $transient, $value, $expiration );

i parametri necessari sono:

$transient: Nome da assegnare
$value: valore da assegnare
$expiration: durata in secondi

ad esempio

set_transient('prova', '1023', 600)

salva nel nostro database un transient chiamato prova con valore 1023 e validità di  600 secondi ( 10 minuti )
per richiamarlo sarà quindi necessario utilizzare la funzione

get_transient( $transient );

con parametro

$transient: nome del transient da recuperare

quindi per recuperare la nostra variabile prova basterà assegnare il risultato della get_transient ad una variabile come segue

 $variabile = get_transient('prova');

Sono inoltre presenti gli stessi metodi per le installazioni di WordPress Multisite, chiamati rispettivamente:

set_site_transient($transient, $value, $expiration);
get_site_transient($transient);

 

In WordPress 3.5 sono state aggiunte alcune costanti per definire velocemente porzioni di tempo e  che potranno risultare utili nell’uso dei transient :

MINUTE_IN_SECONDS  = 60 (seconds)
HOUR_IN_SECONDS    = 60 * MINUTE_IN_SECONDS
DAY_IN_SECONDS     = 24 * HOUR_IN_SECONDS
WEEK_IN_SECONDS    = 7 * DAY_IN_SECONDS
YEAR_IN_SECONDS    = 365 * DAY_IN_SECONDS

Ecco quindi un breve esempio di utilizzo dei transient :

<?php
$transient = get_transient( 'my_transient' );
if ( empty( $transient ) ){ // Non c'è un transient valido 
   $newvalue= something();
   set_transient('my_transient', $newvalue, HOUR_IN_SECONDS );
} else {
   // Esiste ancora il transient 'my_transient' ... faccio altro ...
}
?>

 

L’uso dei transient permette di salvare variabili temporanee come spesso avviene quando si è all’interno di una sessione PHP ( http://php.net/manual/en/features.sessions.php ) , con la differenza che mentre una sessione PHP è univocamente collegata al browser dell’utente , la gestione di un transient può essere legata ad un singolo utente solamente con metodi non completamente sicuri, come ad esempio l’md5 del’IP del visitatore + il la stringa identificativa del browser.

Inoltre bisognerebbe ricordarsi che dopo  aver utilizzato il transient è necessario cancellarli per evitare di vedere la propria tabella {$wpdb->prefix}options crescere inutilmente , occorre sempre cancellare il transient con l’apposito comando:

delete_transient( $transient );

Questa funzione ci da come risultato un valore booleano per indicare se la cancellazione ha avuto successo.

Attenzione: molti plugin usano questo set di funzioni ma non tutti si ricordano di eliminare un transient una volta che questo non è più valido, col risultato di lasciare “sporcizia” nella popolatissima tabella {$wpdb->prefix}options.

Come possiamo eliminare i transient scaduti ed alleggerire la {$wpdb->prefix}options ?
Dato che i transient sono dati temporanei e quindi vengono ricreati a bisogno dai vari plugin e da Wp, l’operazione ideale per pulire i transient è rimuoverli definitivamente dalla options durante la fase di aggiornamento/manutenzione del sito.