WordPress comme headless CMS : la configuration qui change tout

En 2026, WordPress n’est plus seulement un CMS traditionnel couplé à un frontend PHP. Son API REST, mature depuis WordPress 4.7 et considérablement enrichie dans les versions récentes, en fait l’un des backends headless les plus robustes du marché — combinant une interface d’administration éprouvée avec la flexibilité de servir du contenu à n’importe quel frontend : React, Vue, Next.js, une app mobile, ou même un assistant vocal.

Le mode headless WordPress présente plusieurs avantages concurrentiels. D’abord, la familiarité : l’équipe éditoriale continue d’utiliser l’interface WordPress qu’elle connaît. Ensuite, la richesse : tout l’écosystème de plugins WordPress (SEO, e-commerce, médias) reste disponible côté backend. Enfin, la performance : le frontend découplé peut être statiquement généré (SSG) ou rendu côté serveur avec des frameworks modernes, atteignant des performances impossibles avec WordPress traditionnel.

Ce guide couvre la configuration de WordPress en mode headless, l’utilisation avancée de la REST API, la gestion de l’authentification, et l’intégration avec Next.js 15 — la stack headless WordPress la plus populaire en 2026.

Configurer WordPress pour un usage headless optimal

La configuration headless commence par désactiver le frontend WordPress natif pour forcer le trafic utilisateur vers votre frontend Next.js. Ajoutez une redirection dans `functions.php` : interceptez toutes les requêtes vers les pages WordPress et redirigez vers votre domaine frontend. Seules les requêtes vers `/wp-admin/` et `/wp-json/` passent directement.

Configurez CORS pour permettre les requêtes cross-origin depuis votre frontend vers votre instance WordPress. Le plugin ‘WP CORS’ ou quelques lignes dans `functions.php` suffisent : autorisez votre domaine frontend en Production et `localhost:3000` en développement. Attention à ne pas ouvrir CORS à tous les domaines (`*`) — cela créerait un vecteur de sécurité.

Créez un Application Password WordPress (Paramètres → Mots de passe d’application) pour l’authentification des requêtes d’écriture depuis votre frontend ou vos scripts de déploiement. Ces tokens peuvent être révoqués individuellement et ont une portée limitée — bien supérieur à l’authentification par cookie pour les accès programmatiques.

Étendre la REST API avec des champs personnalisés

L’API REST WordPress expose par défaut les champs standard des posts (titre, contenu, excerpt, date, auteur, catégories, tags). Pour un usage headless complet, vous avez besoin d’accéder aux méta-données personnalisées (champs ACF, SEO Yoast, données produit WooCommerce).

La fonction `register_rest_field()` permet d’ajouter des champs personnalisés à n’importe quel type de contenu dans la réponse API. Pour exposer les métadonnées Yoast SEO dans les réponses posts/pages, vous déclarez un champ `yoast_meta` qui récupère `_yoast_wpseo_metadesc`, `_yoast_wpseo_title`, et l’Open Graph image. Votre frontend peut ensuite utiliser ces données pour générer les balises meta sans requête supplémentaire.

Pour les performances, évitez d’inclure des champs lourds dans la réponse par défaut. Utilisez le paramètre `_fields` des requêtes API pour ne récupérer que ce dont vous avez besoin : `/wp-json/wp/v2/posts?_fields=id,title,slug,excerpt,yoast_meta`. Cela réduit la taille des réponses de 60 à 80 %.

Authentification et sécurité de l’API

Une API REST exposée publiquement nécessite une stratégie d’authentification à plusieurs niveaux. Pour les endpoints en lecture publique (posts, pages, catégories), aucune authentification n’est nécessaire — c’est votre contenu public. Pour les endpoints en écriture ou qui exposent des données privées, l’authentification est obligatoire.

En 2026, le standard pour les APIs headless WordPress est JWT (JSON Web Token) via le plugin ‘JWT Authentication for WP REST API’. Le flux : le frontend envoie les credentials admin en POST à `/wp-json/jwt-auth/v1/token`, reçoit un token JWT valide 7 jours, et l’inclut en Authorization header dans les requêtes ultérieures. Les tokens sont stateless (vérifiables sans appel DB) et révocables.

Limitez le taux de requêtes sur vos endpoints API avec votre reverse proxy (Nginx, Cloudflare) pour prévenir les abus. Configurez également `application-passwords` dans WordPress pour restreindre quels utilisateurs peuvent créer des tokens d’application. Un attaquant qui compromet un compte éditeur ne doit pas pouvoir accéder aux fonctionnalités réservées aux admins.

Intégration Next.js 15 : fetch, SSG et ISR

Next.js 15 avec App Router est la stack frontend de choix pour WordPress headless en 2026. La combinaison offre : Incremental Static Regeneration (ISR) pour des pages ultra-rapides avec données fraîches, React Server Components pour des bundles JS réduits, et une DX excellente avec TypeScript et Tailwind.

Le pattern recommandé : générez statiquement les pages les plus visitées (accueil, articles populaires) au build time via `generateStaticParams()`. Configurez une revalidation toutes les 60 secondes pour que les nouveaux contenus apparaissent rapidement sans rebuild complet. Les pages moins populaires sont rendues à la demande en ISR — première visite déclenche le render, visites suivantes servent le cache.

Pour la gestion des webhooks WordPress → revalidation Next.js : configurez un hook WordPress qui envoie un POST à votre endpoint Next.js `/api/revalidate` quand un article est publié ou mis à jour. Next.js invalide alors le cache de la page concernée. Résultat : votre éditeur publie dans WordPress, le site Next.js se met à jour en moins de 5 secondes.

Performance et SEO d’une architecture headless WordPress

L’architecture headless WordPress avec Next.js offre des performances Core Web Vitals nettement supérieures au WordPress traditionnel. Les pages statiques générées par Next.js ont un TTFB de 50 à 200ms (vs 500ms à 2s pour WordPress dynamique), un LCP quasi-invariablement <1.5s avec des images optimisées, et un CLS proche de zéro avec un layout statique prévisible.

Le SEO headless nécessite une attention particulière. Next.js Metadata API génère les balises ``, «  et Open Graph côté serveur — parfait pour les crawlers. Assurez-vous que votre sitemap XML est généré dynamiquement depuis l’API WordPress et mis à jour à chaque publication. Le plugin Yoast continue de gérer les métadonnées dans WordPress, votre frontend les lit via la REST API et les injecte dans le « .</p> <p>Le seul inconvénient de l’architecture headless est la complexité opérationnelle accrue : deux systèmes à maintenir (WordPress + Next.js), deux déploiements à coordonner. Cette complexité est justifiée pour les sites avec fort trafic ou équipes frontend avancées, mais peut être excessive pour un blog simple ou un site vitrine de petite taille. Évaluez votre besoin réel avant de vous engager dans cette architecture.</p> <pre><code class="language-typescript">// app/[slug]/page.tsx — Next.js 15 + WordPress REST API import { Metadata } from 'next' import { notFound } from 'next/navigation' const WP_API = process.env.WORDPRESS_API_URL || 'https://wpadminlab.com/wp-json' async function getPost(slug: string) { const res = await fetch( `${WP_API}/wp/v2/posts?slug=${slug}&_fields=id,title,content,excerpt,yoast_meta,date`, { next: { revalidate: 60 } } // ISR: rafraîchit toutes les 60 secondes ) if (!res.ok) return null const posts = await res.json() return posts[0] || null } export async function generateMetadata({ params }: { params: { slug: string } }): Promise<Metadata> { const post = await getPost(params.slug) if (!post) return { title: 'Article non trouvé' } return { title: post.yoast_meta?.title || post.title.rendered, description: post.yoast_meta?.description || post.excerpt.rendered.replace(/<[^>]+>/g, ''), openGraph: { title: post.title.rendered, images: [post.yoast_meta?.og_image || '/og-default.jpg'], }, } } export default async function PostPage({ params }: { params: { slug: string } }) { const post = await getPost(params.slug) if (!post) notFound() return ( <article> <h1 dangerouslySetInnerHTML={{ __html: post.title.rendered }} /> <div dangerouslySetInnerHTML={{ __html: post.content.rendered }} /> </article> ) } // Générer les paths statiques pour les articles populaires export async function generateStaticParams() { const res = await fetch(`${WP_API}/wp/v2/posts?per_page=50&_fields=slug`) const posts = await res.json() return posts.map((p: {slug: string}) => ({ slug: p.slug })) }</code></pre> <h2>Sources et références</h2> <ul> <li><a href="https://make.wordpress.org/core/" rel="nofollow noopener" target="_blank">WordPress Core Blog</a></li> <li><a href="https://wptavern.com/" rel="nofollow noopener" target="_blank">WP Tavern</a></li> <li><a href="https://wordpress.org/news/" rel="nofollow noopener" target="_blank">WordPress.org Actualités</a></li> <li><a href="https://kinsta.com/fr/blog/" rel="nofollow noopener" target="_blank">Kinsta Blog</a></li> <li><a href="https://deliciousbrains.com/blog/" rel="nofollow noopener" target="_blank">Delicious Brains</a></li> <li><a href="https://www.smashingmagazine.com/category/wordpress" rel="nofollow noopener" target="_blank">Smashing Magazine WP</a></li> </ul> <!-- Author Box --> <div class="author-box"> <div class="author-avatar" style="width:48px;height:48px;font-size:1.2rem">W</div> <div> <div style="font-weight:700;color:var(--gray-900);margin-bottom:var(--s-1)">WP Admin Lab</div> <p style="font-size:var(--fs-sm);color:var(--gray-500);margin:0">Architecte web full-stack. WordPress, performance, data et sécurité. Notes de terrain, tests reproductibles et retours d'expérience.</p> </div> </div> </div> <!-- Comments --> <section class="comments-section" style="max-width:720px;margin:var(--s-12) auto;padding:0 var(--s-6)"> <h2 style="font-size:var(--fs-2xl);margin-bottom:var(--s-6)">Commentaires (0)</h2> <div class="comment-form-wrapper" style="background:var(--gray-25);border-radius:var(--radius-lg);padding:var(--s-6);margin-top:var(--s-8)"> <h3 style="font-size:var(--fs-lg);margin-bottom:var(--s-4)">Laisser un commentaire</h3> <p style="font-size:var(--fs-sm);color:var(--gray-500);margin-bottom:var(--s-4)"> Les commentaires sont modérés. Questions WordPress, cybersécurité ou dev web bienvenues. </p> <div id="respond" class="comment-respond"> <h3 id="reply-title" class="comment-reply-title"> <small><a rel="nofollow" id="cancel-comment-reply-link" href="/wordpress-rest-api-headless-cms-nextjs-2026/#respond" style="display:none;">Annuler la réponse</a></small></h3><form action="https://wpadminlab.com/wp-comments-post.php" method="post" id="commentform" class="comment-form"><p class="comment-notes"><span id="email-notes">Votre adresse e-mail ne sera pas publiée.</span> <span class="required-field-message">Les champs obligatoires sont indiqués avec <span class="required">*</span></span></p><p><textarea id="comment" name="comment" rows="4" placeholder="Votre question ou commentaire..." style="width:100%;padding:12px;border:1px solid var(--gray-200);border-radius:8px;font-family:var(--font-sans);font-size:var(--fs-base);resize:vertical"></textarea></p><p><input name="author" type="text" placeholder="Votre nom" style="width:100%;padding:10px 12px;border:1px solid var(--gray-200);border-radius:8px;font-family:var(--font-sans);font-size:var(--fs-base);margin-bottom:var(--s-3)"></p> <p><input name="email" type="email" placeholder="Votre email (non publié)" style="width:100%;padding:10px 12px;border:1px solid var(--gray-200);border-radius:8px;font-family:var(--font-sans);font-size:var(--fs-base)"></p> <p class="comment-form-cookies-consent"><input id="wp-comment-cookies-consent" name="wp-comment-cookies-consent" type="checkbox" value="yes" /> <label for="wp-comment-cookies-consent">Enregistrer mon nom, mon e-mail et mon site dans le navigateur pour mon prochain commentaire.</label></p> <p class="form-submit"><input name="submit" type="submit" id="submit" class="btn btn-primary" value="Publier" /> <input type='hidden' name='comment_post_ID' value='576' id='comment_post_ID' /> <input type='hidden' name='comment_parent' id='comment_parent' value='0' /> </p></form> </div><!-- #respond --> </div> </section> <nav class="post-navigation"> <div><a href="https://wpadminlab.com/woocommerce-optimisation-performance-10-techniques-2026/" rel="prev">← WooCommerce : 10 optimisations de performance pour booster vos conversions en 2026</a></div> <div></div> </nav> </article> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> </main> <footer class="site-footer"> <div class="container"> <div class="footer-grid"> <div class="footer-brand"> <a href="https://wpadminlab.com/" class="footer-branding" aria-label="WP Admin Lab"> <img class="footer-brand-logo" src="https://wpadminlab.com/assets/brand/wpadminlab-logo-compact-dark.svg" alt="WP Admin Lab" width="253" height="60" decoding="async" loading="lazy" > </a> <p>Guides WordPress, sécurité, performance et data pour exploiter des sites web solides, maintenables et mesurables.</p> </div> <div class="footer-col"> <h2 class="footer-col-title">Catégories</h2> <a href="https://wpadminlab.com/category/actualite/">Actualité</a><a href="https://wpadminlab.com/category/big-data/">Big Data</a><a href="https://wpadminlab.com/category/business-intelligence/">Business Intelligence</a><a href="https://wpadminlab.com/category/css/">CSS</a><a href="https://wpadminlab.com/category/cybersecurite/">Cybersécurité</a> </div> <div class="footer-col"> <h2 class="footer-col-title">Liens</h2> <a href="/blog">Blog</a> <a href="/a-propos">À propos</a> <a href="/contact">Contact</a> <a href="/privacy-policy">Confidentialité</a> <a href="/mentions-legales">Mentions légales</a> </div> </div> <div class="footer-bottom"> <p>© 2026 WP Admin Lab. Propulsé par WordPress. Hébergé avec passion chez o2switch.</p> </div> </div> </footer> <!-- Cookie Consent --> <div id="cookie-banner" class="cookie-banner"> <span>Cookies de mesure d'audience et de publicité. <a href="/privacy-policy">Confidentialité</a></span> <div class="cookie-actions"> <button type="button" class="cookie-secondary" data-cookie-choice="refuse">Refuser</button> <button type="button" data-cookie-choice="accept">OK</button> </div> </div> <!-- Back to Top --> <a href="#" class="back-to-top" id="back-to-top" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" aria-label="Retour en haut de page" title="Haut de page"> <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="18 15 12 9 6 15"/></svg> </a> <script type="speculationrules"> {"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/wpadminlab/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]} </script> <!-- Koko Analytics v2.4.0 - https://www.kokoanalytics.com/ --> <script> (()=>{var e=window.koko_analytics,c=["utm_source","utm_medium","utm_campaign"];function d(){let t={},a=new URLSearchParams(window.location.search),s=new URLSearchParams(window.location.hash.substring(1));return c.forEach(i=>{let n=a.get(i)||s.get(i);n&&(t[i]=n)}),t}e.trackPageview=function(t,a){if(/bot|crawl|spider|seo|lighthouse|facebookexternalhit|preview|prerender/i.test(navigator.userAgent)||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress){console.debug("Koko Analytics: Ignoring call to trackPageview because user agent is a bot or this is a headless browser.");return}navigator.sendBeacon(e.url,new URLSearchParams({action:"koko_analytics_collect",pa:t,po:a,r:document.referrer.indexOf(e.site_url)==0?"":document.referrer,m:e.use_cookie?"c":e.method[0],...d()}))};function o(){e.trackPageview(e.path,e.post_id)}function r(){e.autotracked||(o(),e.autotracked=!0)}document.visibilityState==="hidden"||document.visibilityState==="prerender"?document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"&&r()}):r();window.addEventListener("pageshow",t=>{t.persisted&&o()});})(); </script> <script id="wpadminlab-js-js" src="https://wpadminlab.com/wp-content/themes/wpadminlab/assets/js/main.js?ver=2.3.0"></script> </body> </html>