Le Transient API di WordPress sono un semplice modo di immagazzinamento dei dati di cache nel database di WordPress.
Questo metodo permette di utilizzare queries intensive e immagazzinarle in una cache temporanea per incrementare le prestazioni. Le Transient API sono quindi temporanee , significa che dopo uno specifico ammontare di tempo, la cache (copia) sarà o aggiornata o cancellata.
Fondamentalmente è tutto qui. Vediamo qualche funzionamento.

Il primo passo è settare la transient API. Il meccanismo che si utilizza è utilizzare set_transient()

Transient API Worpdress

set_transient( nome Transient, valore transient , scadenza in secondi)
  • Nome Transient (obbligatorio) è una stringa di lunghezza inferiore a 40 caratteri obbligatoriamente.
  • Valore Transient (obbligatorio) deve essere una stringa altrimenti viene serializzato e converito in stringa.
  • Scadenza in Secondi. Rappresenta appunto la scadenza per il quale questo campo rimane valido. Se il valore è 0 quando verrà controllato la presenza il valore stesso verrà ricaricato in automatico.
    Facciamo un sempio in concreto
set_transient("ilmiosito", "memorizzo 1", 3600);

In questo caso il valore memorizzo 1 del miosito sarà accessibile per 1h passato questo tempo il valore verrà automaticamente cancellato.
Dalla versione 3.5 WP ha inoltre introdotto un altro sistema di nomenclatura che facilita abbastanza il precende ossia

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
MONTH_IN_SECONDS = 30 * DAY_IN_SECONDS
YEAR_IN_SECONDS = 365 * DAY_IN_SECONDS

quindi volendo il settaggio può essere riscritto nella seguente maniera.

set_transient("ilmiosito", "memorizzo 1", 1 * HOUR_IN_SECONDS);

Per ottenere i valori memorizzati nel database si usa la funzione get_transient();

La sua sintassi è la seguente.

get_transient( $transient );

dove ovviamente $transient è il nome che abbiamo utilizzato nella memorizzazione
Facciamo un piccolo esempio per chiarire meglio il suo utilizzo

$value = get_transient("ilmiosito");

if($value === false)
{
 echo "Expired or not found";
}

nel caso non avessimo più bisogno di quella memorizzazione per rilasciare lo spazio di usa il seguente comando

delete_transient( $transient );

ma insomma è un’opzione abbastanza particolare.

Un esempio più completo è il seguente

<?php

if ( false === ( $special_query_results = get_transient( 'special_query_results' ) ) ) {
 // Se è false vuol dire che non è presente oppure che deve essere rigenerata e questo facciamo

$special_query_results = new WP_Query( 'cat=5&order=random&tag=tech&post_meta_key=thumbnail' );
 set_transient( 'special_query_results', $special_query_results, 12 * HOUR_IN_SECONDS );
}

?>

Vediamo quindi un esempio più concreto. Che poi è alla base dei plugins di Cache come WP_Cache Totatal Cache etc. etc.
Questo esempio è ripreso direttamente dal sito della WordPress e ve lo lascio originale.

<?php 
// Check for transient. If none, then execute WP_Query
if ( false === ( $featured = get_transient( 'foo_featured_posts' ) ) ) {
 
 $featured = new WP_Query(
 array(
 'category' => 'featured',
 'posts_per_page' => 5
 ));

// Put the results in a transient. Expire after 12 hours.
 set_transient( 'foo_featured_posts', $featured, 12 * HOUR_IN_SECONDS );
} ?>
 
// Run the loop as normal
<?php if ( $featured->have_posts() ) : ?>
 
 <?php while ( $featured->have_posts() ) : $featured->the_post(); ?>
 // featured posts found, do stuff
 <?php endwhile; ?>
 
 <?php else: ?>
 // no featured posts found
<?php endif; ?>

<?php wp_reset_postdata(); ?>

Come potete vedere controlla se $featured ha i post caricati altrimenti li carica da database e li carica in foo_feature_posts nel database e ovviamente a questo punto sono a disposizione per essere visualizzati. Il resto insomma vedete bene che lo già trattato nelle precedenti guide.

 

 

Ovviamente la memorizzazione avviene nella tabella del database wp_options . Se fate un attimo mente locale noterete un funzionamento molto simile a quello già visto con le funzioni add_option() e in effetti sono molto simili. L’unica differenza che qui è introdotta un dato di scadenza.