Les transients WordPress sont un système de cache intégré qui stocke temporairement des données dans la base pour éviter de recalculer des requêtes lourdes à chaque chargement de page. Trois fonctions suffisent : set_transient(), get_transient(), delete_transient(). Les transients expirés s’accumulent dans la table wp_options et peuvent ralentir votre site — nettoyez-les régulièrement avec WP-CLI ou un plugin comme WP-Optimize.
Pas le temps ? Faites-le analyser par l'IA
En 15 ans de WordPress, j’ai vu des sites avec 50 000 transients expirés dans leur base de données. Le propriétaire se plaignait que son site était lent. Pas étonnant : chaque chargement de page interrogeait une table wp_options de 200 Mo au lieu de 5 Mo. Parcourez nos articles pratiques WordPress pour aller plus loin.
Les transients sont un outil puissant quand ils sont bien gérés, et une bombe à retardement quand ils ne le sont pas. Cet article vous donne les clés pour comprendre, utiliser et surtout nettoyer les transients WordPress.
Qu’est-ce qu’un transient WordPress ?
Un transient est une donnée temporaire stockée dans la base de données WordPress avec une date d’expiration. Pensez-y comme un post-it avec une alarme : vous écrivez une information, vous définissez combien de temps elle reste valide, et WordPress la jette automatiquement une fois expirée.
Concrètement, les transients servent à mettre en cache le résultat d’opérations coûteuses :
- Requêtes vers des API externes — récupérer votre nombre d’abonnés Twitter, les données Google Analytics, un flux RSS
- Requêtes SQL complexes — une WP_Query avec 5 filtres et 3 jointures qui prend 200 ms
- Calculs lourds — générer un sitemap, compiler des statistiques, agréger des données
Au lieu de recalculer tout ça à chaque visite, WordPress le calcule une fois, stocke le résultat dans un transient, et le ressert directement pendant la durée de vie définie.
Transient vs cache de page : quelle différence ?
Un plugin de cache (LiteSpeed Cache, WP Rocket) met en cache la page entière sous forme de fichier HTML statique. Un transient met en cache un morceau de donnée — un widget, une requête, un bloc de contenu dynamique.
Les deux sont complémentaires. Le cache de page évite de générer la page à chaque visite. Le transient évite de recalculer un bloc spécifique quand la page doit être générée (utilisateur connecté, page non cachée, premier accès).
Les 3 fonctions essentielles
Créer un transient
set_transient( 'mon_transient', $valeur, HOUR_IN_SECONDS );
Trois paramètres : le nom (172 caractères max), la valeur (chaîne, tableau, objet — WordPress gère la sérialisation), et la durée en secondes. WordPress fournit des constantes pratiques : MINUTE_IN_SECONDS, HOUR_IN_SECONDS, DAY_IN_SECONDS, WEEK_IN_SECONDS.
Récupérer un transient
$data = get_transient( 'mon_transient' );
if ( false === $data ) {
// Le transient n'existe pas ou a expiré — recalculer
}
Point critique : utilisez l’opérateur d’identité === (trois signes égal), pas ==. Si votre transient stocke la valeur 0 ou une chaîne vide, == les confondrait avec false (transient expiré).
Supprimer un transient
delete_transient( 'mon_transient' );
Utile quand les données sous-jacentes changent avant l’expiration. Par exemple, si vous cachez la liste des derniers articles dans un transient d’une heure, supprimez-le à la publication d’un nouvel article via le hook save_post.
Exemple concret : cacher une requête WP_Query
$articles = get_transient( 'wpf_featured_posts' );
if ( false === $articles ) {
$query = new WP_Query( [
'posts_per_page' => 5,
'meta_key' => 'featured',
'meta_value' => '1',
'orderby' => 'date',
'order' => 'DESC',
] );
$articles = $query->posts;
set_transient( 'wpf_featured_posts', $articles, 12 * HOUR_IN_SECONDS );
wp_reset_postdata();
}
// Utiliser $articles directement
Sans transient, cette requête s’exécute à chaque chargement de page. Avec, elle s’exécute une fois toutes les 12 heures. Sur un site à 10 000 pages vues/jour, c’est la différence entre 10 000 requêtes SQL et 2.
Astuce : invalidez le transient quand les données changent pour que le cache se recrée automatiquement après chaque publication.
add_action( 'save_post', function() { delete_transient( 'wpf_featured_posts' ); } );
Où sont stockés les transients ?
Par défaut, les transients vivent dans la table wp_options de votre base de données MySQL. Chaque transient crée deux entrées : une pour la valeur (_transient_nom) et une pour l’expiration (_transient_timeout_nom).
Si vous utilisez un object cache externe (Redis, Memcached), les transients sont automatiquement stockés en mémoire au lieu de la base de données. C’est 10 à 100 fois plus rapide. Hébergeurs comme WP Engine, Kinsta ou Cloudways activent Redis par défaut. Sur O2switch, vous pouvez l’activer via le module Redis dans cPanel.
Le problème : les transients expirés qui s’accumulent
WordPress ne supprime pas les transients expirés de manière proactive. Ils sont nettoyés « au passage » quand un get_transient() découvre qu’un transient a expiré. Les transients que personne ne réclame restent indéfiniment dans wp_options.
Sur un site avec beaucoup de plugins (cache, SEO, analytics, formulaires), des milliers de transients orphelins s’accumulent. La table wp_options grossit, les requêtes autoload ralentissent, et votre TTFB (Time To First Byte) explose.
Attention : ne supprimez jamais manuellement la table wp_options complète. Elle contient aussi vos réglages WordPress, vos options de thème et vos clés API. Supprimez uniquement les lignes dont le option_name commence par _transient_.
Nettoyer les transients : 3 méthodes
Méthode 1 : WP-CLI (recommandée)
Si vous avez un accès WP-CLI à votre hébergement :
# Supprimer tous les transients expirés
wp transient delete --expired
# Voir tous les transients (debug)
wp transient list
# Supprimer TOUS les transients (expirés + actifs)
wp transient delete --all
La commande --expired est sûre — elle ne touche qu’aux transients déjà périmés. La commande --all force la recréation de tous les transients au prochain chargement de page — utile après un débug.
Méthode 2 : plugin WP-Optimize
WP-Optimize a une option « Supprimer les options transitoires » dans son onglet Base de données. Un clic, c’est fait. Vous pouvez aussi planifier un nettoyage automatique hebdomadaire. C’est la méthode la plus accessible pour les non-techniciens.
Méthode 3 : requête SQL directe
En dernier recours, via phpMyAdmin ou Adminer :
-- Supprimer les transients expirés
DELETE a, b FROM wp_options a
INNER JOIN wp_options b ON b.option_name = CONCAT('_transient_timeout_', SUBSTRING(a.option_name, 12))
WHERE a.option_name LIKE '_transient_%'
AND a.option_name NOT LIKE '_transient_timeout_%'
AND b.option_value < UNIX_TIMESTAMP();
Adaptez le préfixe wp_ si votre installation utilise un préfixe personnalisé (comme qlffvj_ sur wpformation.com).
Déboguer les transients avec Query Monitor
Le plugin Query Monitor affiche tous les transients lus et écrits pendant le chargement d’une page. C’est l’outil indispensable pour identifier :
- Les plugins qui créent des transients sans les nettoyer
- Les transients qui se recréent à chaque page (expiration trop courte ou bug)
- La taille de la table
wp_optionset le nombre d’entréesautoload
Si vous découvrez un plugin qui génère des centaines de transients inutiles, c’est généralement un signe de mauvaise qualité de code. Cherchez une alternative.
Transients et multisite WordPress
Sur une installation multisite, chaque site a ses propres transients dans sa table wp_options. Pour partager un transient entre tous les sites du réseau, utilisez les variantes set_site_transient(), get_site_transient() et delete_site_transient(). Les site transients sont stockés dans la table wp_sitemeta.
Questions fréquentes
Les transients ralentissent-ils mon site ?
Non — les transients accélèrent votre site quand ils sont bien utilisés. Ce qui ralentit, ce sont les transients expirés qui s’accumulent dans wp_options et gonflent la table. Un nettoyage régulier (hebdomadaire) règle le problème. Avec un object cache Redis, les transients n’impactent même plus la base de données.
Quelle durée d’expiration choisir pour un transient ?
Dépend de la fraîcheur nécessaire. Flux RSS : 1 à 6 heures. Statistiques : 12 à 24 heures. Données quasi statiques (version de WordPress, infos plugin) : 1 semaine. Règle générale : la durée la plus longue acceptable pour vos utilisateurs. Plus la durée est longue, plus vous économisez de ressources.
Puis-je supprimer tous les transients sans risque ?
Oui. Supprimer tous les transients (même les actifs) ne casse rien. Au prochain chargement de page, WordPress et vos plugins les recréent automatiquement. Vous aurez un léger ralentissement sur la première page vue (le temps de recalculer les données), puis tout revient à la normale.
Faut-il un plugin pour gérer les transients ?
Pour le nettoyage, WP-Optimize ou WP-CLI suffisent. Le plugin Transients Manager permet de voir et supprimer les transients individuellement — utile pour le debug mais pas nécessaire au quotidien. Si vous utilisez déjà un plugin d’optimisation comme WP-Optimize, il gère déjà les transients.
Quelle différence entre transients et Options API ?
L’Options API (get_option/update_option) stocke des données permanentes sans expiration. Les transients ajoutent une date d’expiration. Si vous avez besoin de stocker un réglage persistant, utilisez l’Options API. Si vous cachez un résultat temporaire qui peut être recalculé, utilisez un transient. Les transients sont aussi automatiquement déportés en mémoire si un object cache est actif — pas les options.
Ces 7 templates, je les donne en formation payante. Ici, ils sont gratuits.
Sécurité, SEO, performance, contenu, maintenance — les outils que j'utilise en formation et en audit, avec les prompts IA pour aller 10x plus vite.
- 01Workflow contenu anti-IA
- 02Framework SEO Title/Meta/H1
- 03Audit Express 30 points
- 04Blindage sécurité 10 étapes
- 05PageSpeed 90+ sans plugin
- 06Calendrier maintenance IA
- 07Plan d'action 90 jours
1 email / 2 jours pendant 14 jours. Désabonnement en 1 clic.
Analyser avec l'IA
Partager

