asset 1
asset 2
asset 3
asset 2
asset 21

Les transients WordPress : un outil de cache simple pour soulager votre site

11 septembre 2026

Votre site Word­Press met du temps à char­ger. Pour­tant vous avez déjà mis en place l’es­sen­tiel : un héber­ge­ment adap­té, des images opti­mi­sées et une exten­sion de cache acti­vée. Vous consta­tez cepen­dant que quelque chose conti­nue à ralen­tir cer­taines pages, sans que vous sachiez vrai­ment quoi. Il est fort pro­bable que cela soit dû à un trai­te­ment que votre site refait inuti­le­ment à chaque visite : par exemple l’ap­pel à un flux Ins­ta­gram affi­ché sur votre page d’ac­cueil, ou une requête un peu lourde à votre base de données.

Et bien, sachez que Word­Press dis­pose nati­ve­ment d’un outil qui per­met d’é­vi­ter de refaire ce tra­vail à chaque visite.

Cet outil, ce sont les tran­sients. Vous n’en avez peut-être jamais enten­du par­ler. Per­son­nel­le­ment, je connais les tran­sients grâce au Slack Word­Press FR, où je retrouve quo­ti­dien­ne­ment « mes col­lègues de travail ».

Aujourd’­hui, je vous explique ce que c’est et à quoi ça sert.

Qu’est-ce qu’un transient WordPress ?

Un tran­sient, c’est une don­née que Word­Press met de côté tem­po­rai­re­ment, avec une date d’ex­pi­ra­tion, pour évi­ter de la recal­cu­ler ou de la rede­man­der à chaque char­ge­ment de page. Par défaut, cette don­née est sto­ckée dans la table wp_options de votre base de don­nées, la même table qui contient déjà les réglages géné­raux de votre site.

La dif­fé­rence avec une option de don­née clas­sique (comme le titre de votre site ou l’a­dresse email de contact, enre­gis­trés dans Réglages > Géné­ral de votre tableau de bord) tient en un mot : la durée.

Votre email ou le titre de votre site res­tent en base indé­fi­ni­ment, jus­qu’à ce que vous la modi­fiiez ou la sup­pri­miez vous-même. Par contre, un tran­sient, lui, porte une date de péremp­tion dès sa créa­tion. Pas­sé ce délai, Word­Press consi­dère qu’il n’est plus valable.

Notons, en pas­sant, un petit incon­vé­nient, le tran­sient reste par­fois encore tech­ni­que­ment en base. Je vous en parle juste après.

À quoi servent concrètement les transients ?

Il faut avant tout pré­ci­ser que rien de tout ça ne se déclenche auto­ma­ti­que­ment. Ce n’est pas Word­Press qui décide, tout seul, de mettre en cache tel ou tel élé­ment. C’est vous (ou l’ex­ten­sion que vous uti­li­sez) qui devez les mettre en place.

Voi­ci les situa­tions où ça vaut le coup de le faire :

  • un wid­get qui affiche la météo ou un flux de réseau social : en y ajou­tant un tran­sient, pas besoin de rap­pe­ler le ser­vice externe à chaque per­sonne qui visite le site, un cache de quelques minutes peut suffire
  • une requête un peu lourde, comme la liste des articles les plus com­men­tés du mois. On peut deman­der à ce que cette requête soit recal­cu­lée une fois par heure plu­tôt qu’à chaque char­ge­ment de page
  • des don­nées pro­ve­nant d’une API tierce, comme la dis­po­ni­bi­li­té d’un pro­duit chez un fournisseur

Ces exemples de situa­tions ont un point com­mun : un trai­te­ment qui coûte du temps ou des res­sources, mais dont le résul­tat ne change pas à chaque seconde. C’est exac­te­ment le ter­rain de jeu des transients.

Comment fonctionnent les transients, sans être développeur ou développeuse

Je vous explique com­ment ça marche, parce que moi-même j’aime savoir le pour­quoi du com­ment. Mais vous ver­rez plus bas, qu’il existe des moyens, sans vrai­ment mettre les mains dans le code, qui vous per­met­tront de mettre cela en place.

Pour les tran­sients, trois fonc­tions suffisent :

set_transient() //pour créer le cache, avec une durée de vie
get_transient() //pour aller le chercher et vérifier au passage s'il existe encore
delete_transient() //pour le supprimer manuellement si besoin

Repre­nons l’exemple du flux Ins­ta­gram évo­qué en intro­duc­tion : plu­tôt que de sol­li­ci­ter ce ser­vice à chaque visite de votre page d’ac­cueil, on va mettre son résul­tat en cache. Ce genre de code se place dans le fichier functions.php de votre thème, ou dans une exten­sion, comme on le ver­ra un peu plus loin.

Voi­ci à quoi ça pour­rait res­sem­bler. Je vous pro­pose une ver­sion sim­pli­fiée du code pour expli­quer com­ment ça marche. En réa­li­té, l’A­PI Ins­ta­gram demande en plus une clé d’ac­cès à confi­gu­rer (ne copiez pas ce bout de code tel quel) :

function moncache_flux_instagram() {
// On vérifie d'abord si le flux est déjà en cache
$flux = get_transient( 'moncache_flux_instagram' );

if ( false === $flux ) {
    // Pas de cache valide : on va chercher les données auprès d'Instagram
    $reponse = wp_remote_get( 'https://exemple-api-instagram.test/mon-compte' );

    // Si la requête a échoué, on renvoie un tableau vide plutôt que de mettre une erreur en cache
    if ( is_wp_error( $reponse ) ) {
        return array();
    }

    // On récupère le contenu de la réponse et on le transforme en donnée utilisable
    $flux = json_decode( wp_remote_retrieve_body( $reponse ), true );

    // On enregistre ce résultat en cache pendant 30 minutes (1800 secondes)
    set_transient( 'moncache_flux_instagram', $flux, 1800 );
}

return $flux;

}

Repre­nons ce code ligne par ligne :

  • $flux : c’est la variable, une sorte de boîte dans laquelle PHP range une valeur pour la réuti­li­ser plus bas dans le code. En PHP, le sym­bole $ sert à repé­rer une variable, quel que soit ce qu’elle contient (un nombre, du texte, ou ici le résul­tat de notre appel à Ins­ta­gram). Dans cet exemple, $flux stocke le résul­tat final et $reponse (un peu plus bas encore) stocke la réponse brute ren­voyée par Ins­ta­gram avant qu’on l’exploite.
  • get_transient( « moncache_flux_instagram » ) : « moncache_flux_instagram » est le nom qu’on peut don­ner au tran­sient (on parle aus­si de sa « clé »), c’est l’i­den­ti­fiant qui per­met de le retrou­ver. On regarde ici si un cache valide existe déjà sous ce nom. Le pré­fixe moncache_ est juste un exemple qui per­met de pré­fixer vos tran­sients avec quelque chose qui vous est propre (les ini­tiales de votre site, par exemple), pour évi­ter qu’une autre exten­sion uti­lise le même nom par hasard.
  • if ( false === $flux ) : s’il n’existe pas, ou s’il a expi­ré, on entre dans le bloc qui va cher­cher les don­nées pour de vrai.
  • wp_remote_get(…) : c’est l’é­tape qui inter­roge réel­le­ment Ins­ta­gram sur le réseau, la plus coû­teuse en temps, celle qu’on cherche jus­te­ment à évi­ter de répéter.
  • is_wp_error( $reponse ) : on véri­fie que la requête n’a pas échoué (ser­vice injoi­gnable, erreur réseau), pour ne pas mettre en cache un résul­tat vide ou une erreur.
  • wp_remote_retrieve_body(…) puis json_decode(…) : on récu­père le conte­nu brut de la réponse, puis on le trans­forme en don­née exploi­table dans votre thème.
  • set_transient( « moncache_flux_instagram », $flux, 1800 ) : on enre­gistre ce résul­tat en cache pour 30 minutes.
  • return $flux : on ren­voie la donnée.

Pour résu­mer : la logique reste la même quel que soit ce que vous met­tez en cache : si le tran­sient existe, on l’u­ti­lise direc­te­ment. Sinon, on fait le tra­vail une fois, puis on l’en­re­gistre pour la pro­chaine fois. C’est cette petite condi­tion, if ( false === $flux ), qui fait tout le travail.

Sans ce mécanisme de cache, que se passe-t’il ?

Sans tran­sient, ce code irait inter­ro­ger Ins­ta­gram à chaque char­ge­ment de la page d’ac­cueil, pour chaque per­sonne qui la visite. Les consé­quences se cumulent vite :

  • les pages sont plus lentes à char­ger, puisque Word­Press attend la réponse d’Ins­ta­gram avant de pou­voir affi­cher le reste
  • le site ralen­tit, peut même affi­cher une erreur, dès qu’Ins­ta­gram répond len­te­ment ou devient injoi­gnable, alors que ce n’est qu’un élé­ment par­mi d’autres sur votre page
  • on prend le risque de dépas­ser le quo­ta d’ap­pels auto­ri­sé par cer­tains ser­vices (beau­coup d’A­PI, dont celle d’Ins­ta­gram, limitent le nombre de requêtes sur une période don­née), ce qui peut faire échouer l’af­fi­chage pour tout le monde, ou blo­quer tem­po­rai­re­ment l’ac­cès à ce service

Le tran­sient ne change rien au résul­tat affi­ché à vos visi­teurs et visi­teuses, par contre il change la fré­quence à laquelle Word­Press va réel­le­ment cher­cher l’information.

Peut-on mettre en place ce code avec les outils o2switch ?

Plu­sieurs outils du cPa­nel o2switch per­mettent en effet d’a­jou­ter ce type de code. Que ce soit sur les offres Grow, Cloud, Pro ou bien les ser­veurs infogérés. 

  • Comme pre­mier outil on a le ges­tion­naire de fichiers. C’est une inter­face web qui per­met de consul­ter et de modi­fier direc­te­ment les fichiers de votre héber­ge­ment, comme jus­te­ment functions.php, sans rien installer.
  • Grâce au compte FTP, on peut envoyer le fichier functions.php modi­fié depuis son ordi­na­teur avec un logi­ciel dédié
  • Et pour les per­sonnes plus à l’aise en ligne de com­mande, le Ter­mi­nal, qui donne un accès SSH depuis votre navigateur.

Atten­tion, avant de fon­cer, il est néces­saire de prendre des pré­cau­tions : en effet, modi­fier le fichier functions.php direc­te­ment com­porte un vrai risque si le code contient la moindre erreur de syn­taxe, votre site peut se retrou­ver avec une page blanche le temps de cor­ri­ger l’er­reur. Pour évi­ter cela, vous pou­vez par exemple uti­li­ser une exten­sion qui per­met d’a­jou­ter des bouts de code (sou­vent appe­lée « code snip­pets »). Elle per­met d’a­jou­ter ce genre de fonc­tion sans tou­cher aux fichiers du thème, et de la désac­ti­ver en un clic si quelque chose se passe mal. Ou encore mieux, faites des tests sur un site clone. 

Transients et cache objet chez o2switch 

Par défaut, un tran­sient est donc sto­cké dans la base de don­nées. Mais dès qu’un cache objet comme Redis ou Mem­ca­ched est actif sur votre héber­ge­ment, Word­Press bas­cule auto­ma­ti­que­ment des­sus pour sto­cker les tran­sients en mémoire plu­tôt qu’en base. Il en résulte une lec­ture beau­coup plus rapide et une base de don­nées moins sollicitée.

Cette pos­si­bi­li­té existe chez o2switch : une ins­tance pri­vée de Redis et une ins­tance pri­vée de Mem­ca­ched sont aus­si pro­po­sées sur les offres Grow, Cloud, Pro et sur les ser­veurs info­gé­rés. Ces ins­tances ne sont pas acti­vées par défaut, il faut les créer soi-même depuis un outil dédié du cPanel.

Atten­tion, les don­nées de ces caches sont éphé­mères, elles dis­pa­raissent au redé­mar­rage du ser­veur. C’est par­fai­te­ment adap­té à un usage de cache comme les tran­sients, mais ça ne doit jamais ser­vir à sto­cker une don­née qu’on ne peut pas se per­mettre de perdre.

Pour que Word­Press s’en serve auto­ma­ti­que­ment, il faut ensuite une exten­sion dédiée, par exemple « Redis Object Cache » (dis­po­nible sur le réper­toire offi­ciel des exten­sions Word­Press) si vous acti­vez Redis. Une fois confi­gu­ré, tous les tran­sients déjà pré­sents sur votre site, ceux de votre thème comme ceux de vos exten­sions, en pro­fitent sans que vous ayez à tou­cher au moindre code.

C’est un vrai plus, chez o2switch, par rap­port à un héber­ge­ment qui ne pro­pose pas cette option nativement.

Le piège des transients qui s’accumulent dans la base de données

C’est le revers de la médaille et un piège dans lequel tombent beau­coup de sites. Les tran­sients expi­rés ne sont pas tou­jours sup­pri­més auto­ma­ti­que­ment de la base de don­nées. De ce fait la table wp_options gros­sit avec le temps, ce qui peut finir par ralen­tir le site entier.

Pré­ci­sion utile : ce pro­blème concerne sur­tout le sto­ckage en base par défaut. Avec un cache objet actif comme Redis ou Mem­ca­ched, décrit juste au-des­sus, les tran­sients expi­rés sont net­toyés auto­ma­ti­que­ment par le cache lui-même, sans inter­ven­tion de votre part.

Si vous n’a­vez pas de cache objet en place, voi­ci com­ment véri­fier et nettoyer :

  1. repé­rer les tran­sients dans la base, via php­MyAd­min, en cher­chant les entrées qui com­mencent par tran­sient (atten­tion, mani­pu­ler direc­te­ment la base de don­nées peut être ris­qué !)
  2. uti­li­ser WP-CLI, avec la com­mande wp tran­sient delete –expi­red, si vous êtes à l’aise avec la ligne de commande
  3. pas­ser par une exten­sion de net­toyage dédiée, une option plus confor­table pour un public moins technique
  4. Des exten­sions de moni­to­ring peuvent aus­si le proposer

Bien utiliser les transients : les bonnes pratiques

Quelques repères pour ne pas se tromper :

  • choi­sis­sez une durée d’ex­pi­ra­tion adap­tée à la don­née : ni trop courte (le cache ne sert alors plus à rien), ni trop longue (vous ris­quez d’af­fi­cher une infor­ma­tion périmée)
  • ne sto­ckez jamais une don­née cri­tique ou sen­sible dans un transient 
  • pré­fixez vos noms de tran­sients (comme dans l’exemple plus haut avec moncache_) pour les repé­rer faci­le­ment en base et évi­ter les conflits avec d’autres extensions
  • réser­vez les tran­sients aux trai­te­ments réel­le­ment coû­teux, un appel externe ou une requête lourde, plu­tôt qu’à une don­née déjà rapide à récupérer

Un site plus rapide ne passe donc pas uni­que­ment par le choix de l’hé­ber­ge­ment. Cer­tains réglages côté Word­Press y contri­buent aus­si, et les tran­sients en sont un bon exemple : simples à mettre en place, et d’au­tant plus effi­caces si votre héber­ge­ment pro­pose un cache objet comme Redis ou Memcached.

Cré­dit image à la Une : Milad Faku­rian

Laisser un commentaire

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

✕
✕