WordPress : Mettre des données en cache avec les transients

Dev BackPHPWordpress

Exemple de scénario (inspiré d’une histoire vraie ™) : Sur une page vous présentez plusieurs vidéos tirées de l’API Youtube, via plusieurs requêtes plus ou moins complexes.

L’API en question vous oblige notamment à récupérer certaines données en plusieurs temps : par exemple pour sortir les vidéos d’une chaîne donnée, il faut d’abord récupérer leurs ID, et à partir de là les données proprement dites (titre, thumbnail, url, etc…). Ces reqûetes multiples peuvent alors prendre plusieurs secondes.

Histoire d’épargner à vos utilisateurs des temps de chargement à rallonge, mettons en place un cache.

Mettre en cache des données

C’est à ce moment que les transcient entrent en jeu. Ils permettent simplement d’enregistrer des données dans la base de wordpress de manière temporaire, et d’y accéder.

Pour sauvegarder un « transient », c’est simple :

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

Le premier paramètre est la clé qui va nous permettre, plus tard, de retrouver notre valeur.

$value est bien sûr la valeur à sauvegarder, sachant que wordpress sérialise automatiquement la variable fournie si besoin.

Le dernier paramètre, $expiration, est le temps de vie en secondes du transient, à partir de maintenant.

A noter que les transients sont insérés dans la table wp_options, et que leur nom y est préfixé par « transient_ », donc inutile de le faire vous-même (que ce soit pour ecrire, lire ou supprimer un transient)

Lire des données

Là encore rien de compliqué :

 get_transient( $transient );  

Passez simplement le nom du transient que vous avez défini dans set_transient. Là aussi, wordpress s’occupe de dé-sérialiser si besoin.

Cette fonction retourn false si le transient n’a pas été défini ou a été expiré.

Supprimer des données

Si vous avez besoin de supprimer un transient :

 delete_transient( $transient );

Exemple d’utilisation

function getMyVar() {
	$foo = get_transient('foo');
	if ($foo !== false) {
		return $foo;
	}

	// on fait des trucs asynchrones/complexes

	// on met en cache pendant 24h
	set_transient('foo', $foo, 24*3600);
	return $foo;
}

Une feature simple mais bien utile, qu’il vaut mieux connaître. Vous trouverez aussi quelques infos supplémentaires sur le codex.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>