{"id":156,"date":"2023-02-14T00:00:00","date_gmt":"2023-02-13T23:00:00","guid":{"rendered":"https:\/\/helloblog.io\/fr\/wp-debug-mieux-deboguer-wordpress-avec-acorn-symfony-ignition-whoops\/"},"modified":"2026-01-20T06:32:41","modified_gmt":"2026-01-20T05:32:41","slug":"wp-debug-mieux-deboguer-wordpress-avec-acorn-symfony-ignition-whoops","status":"publish","type":"post","link":"https:\/\/helloblog.io\/fr\/wp-debug-mieux-deboguer-wordpress-avec-acorn-symfony-ignition-whoops\/","title":{"rendered":"WP_DEBUG, mais en mieux : d\u00e9boguer WordPress proprement avec Acorn (Symfony, Ignition, Whoops)"},"content":{"rendered":"\n<p>Sur un projet WordPress, activer <code>WP_DEBUG<\/code> en d\u00e9veloppement est non n\u00e9gociable : tu rep\u00e8res plus t\u00f4t les notices PHP, les erreurs fatales, les appels d\u00e9pr\u00e9ci\u00e9s, et tu \u00e9vites d\u2019empiler des \u201cpetits soucis\u201d qui explosent plus tard en prod. Le probl\u00e8me, c\u2019est que l\u2019affichage par d\u00e9faut de WordPress est\u2026 minimaliste : un message en clair inject\u00e9 dans la page, souvent sans contexte exploitable.<\/p>\n\n\n\n<p>Si tu travailles avec <strong>Acorn<\/strong> (le runtime PHP de Roots qui apporte une couche \u201cLaravel-like\u201d \u00e0 WordPress), tu peux consid\u00e9rablement am\u00e9liorer cette exp\u00e9rience : pages d\u2019exception plus propres, stack traces plus lisibles, et possibilit\u00e9 d\u2019utiliser <strong>Ignition<\/strong> (la page d\u2019erreur moderne bien connue c\u00f4t\u00e9 Laravel).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Rappel : ce que fait vraiment WP_DEBUG (et pourquoi \u00e7a ne suffit pas)<\/h2>\n\n\n\n<p><code>WP_DEBUG<\/code> est le mode debug natif de WordPress. Une fois activ\u00e9, WordPress et PHP te remontent plus facilement les warnings\/notices\/erreurs, ce qui est essentiel quand tu d\u00e9veloppes un th\u00e8me, un plugin, ou m\u00eame une int\u00e9gration \u201csimple\u201d.<\/p>\n\n\n\n<p>Mais l\u2019output par d\u00e9faut a deux d\u00e9fauts majeurs :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Lisibilit\u00e9 limit\u00e9e : message brut au milieu du HTML, sans mise en forme ni hi\u00e9rarchie.<\/li>\n\n\n<li>Contexte pauvre : selon les cas, la trace est incompl\u00e8te ou peu exploitable, surtout quand plusieurs couches (plugins, MU-plugins, th\u00e8me) s\u2019empilent.<\/li>\n\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"2560\" height=\"2252\" src=\"https:\/\/helloblog.io\/app\/uploads\/sites\/4\/2026\/01\/wp_debug-default-scaled.png\" alt=\"Sortie WP_DEBUG par d\u00e9faut affich\u00e9e directement dans la page\" class=\"wp-image-152\" srcset=\"https:\/\/helloblog.io\/app\/uploads\/sites\/4\/2026\/01\/wp_debug-default-scaled.png 2560w, https:\/\/helloblog.io\/app\/uploads\/sites\/4\/2026\/01\/wp_debug-default-300x264.png 300w, https:\/\/helloblog.io\/app\/uploads\/sites\/4\/2026\/01\/wp_debug-default-1024x901.png 1024w, https:\/\/helloblog.io\/app\/uploads\/sites\/4\/2026\/01\/wp_debug-default-768x676.png 768w, https:\/\/helloblog.io\/app\/uploads\/sites\/4\/2026\/01\/wp_debug-default-1536x1351.png 1536w, https:\/\/helloblog.io\/app\/uploads\/sites\/4\/2026\/01\/wp_debug-default-2048x1802.png 2048w, https:\/\/helloblog.io\/app\/uploads\/sites\/4\/2026\/01\/wp_debug-default-400x352.png 400w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><figcaption class=\"wp-element-caption\">WP_DEBUG \u201cvanilla\u201d : utile, mais vite frustrant au quotidien. \u2014 <em>Forr\u00e1s: Roots.io<\/em><\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Avec Bedrock, WP_DEBUG est d\u00e9j\u00e0 dans les bons rails<\/h2>\n\n\n\n<p>Si tu utilises <strong>Bedrock<\/strong> (le boilerplate WordPress moderne de Roots bas\u00e9 sur Composer), tu pars d\u00e9j\u00e0 avec une configuration d\u2019environnements plus propre. D\u2019apr\u00e8s la documentation Roots, <code>WP_DEBUG<\/code> est activ\u00e9 par d\u00e9faut en environnement de d\u00e9veloppement dans Bedrock, ce qui \u00e9vite l\u2019oubli classique du \u201cj\u2019ai d\u00e9bogu\u00e9 sans debug\u201d.<\/p>\n\n\n\n<div class=\"wp-block-group callout callout-info is-style-info is-layout-flow wp-block-group-is-layout-flow\" style=\"border-width:1px;border-radius:8px;padding-top:1rem;padding-right:1.5rem;padding-bottom:1rem;padding-left:1.5rem\">\n\n<h4 class=\"wp-block-heading callout-title\">\u00c0 retenir<\/h4>\n\n\n<p>Active <code>WP_DEBUG<\/code> en local en permanence. Le co\u00fbt est faible, le gain est \u00e9norme (et l\u2019\u00e9cosyst\u00e8me WordPress n\u2019est pas r\u00e9put\u00e9 pour sa sobri\u00e9t\u00e9 en notices\u2026).<\/p>\n\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Acorn : am\u00e9liorer l\u2019affichage des erreurs quand WP_DEBUG est activ\u00e9<\/h2>\n\n\n\n<p>Acorn am\u00e9liore l\u2019output d\u2019erreur lorsque <code>WP_DEBUG<\/code> est activ\u00e9 <strong>et<\/strong> que l\u2019affichage est autoris\u00e9 c\u00f4t\u00e9 WordPress (typiquement via <code>WP_DEBUG_DISPLAY<\/code>). Concr\u00e8tement, au lieu d\u2019un message brut, tu obtiens une page d\u2019exception structur\u00e9e.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1) Par d\u00e9faut : le handler d\u2019exceptions Symfony<\/h3>\n\n\n\n<p>Sans rien installer de plus, Acorn s\u2019appuie sur le gestionnaire d\u2019exceptions Symfony pour rendre les erreurs plus lisibles. Tu as une mise en forme claire, une trace plus exploitable et, globalement, une exp\u00e9rience plus proche de ce qu\u2019on attend d\u2019un projet PHP moderne.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"2560\" height=\"2252\" src=\"https:\/\/helloblog.io\/app\/uploads\/sites\/4\/2026\/01\/wp_debug-acorn-symfony-scaled.png\" alt=\"Page d\u2019erreur Acorn utilisant le handler Symfony\" class=\"wp-image-153\" srcset=\"https:\/\/helloblog.io\/app\/uploads\/sites\/4\/2026\/01\/wp_debug-acorn-symfony-scaled.png 2560w, https:\/\/helloblog.io\/app\/uploads\/sites\/4\/2026\/01\/wp_debug-acorn-symfony-300x264.png 300w, https:\/\/helloblog.io\/app\/uploads\/sites\/4\/2026\/01\/wp_debug-acorn-symfony-1024x901.png 1024w, https:\/\/helloblog.io\/app\/uploads\/sites\/4\/2026\/01\/wp_debug-acorn-symfony-768x676.png 768w, https:\/\/helloblog.io\/app\/uploads\/sites\/4\/2026\/01\/wp_debug-acorn-symfony-1536x1351.png 1536w, https:\/\/helloblog.io\/app\/uploads\/sites\/4\/2026\/01\/wp_debug-acorn-symfony-2048x1802.png 2048w, https:\/\/helloblog.io\/app\/uploads\/sites\/4\/2026\/01\/wp_debug-acorn-symfony-400x352.png 400w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><figcaption class=\"wp-element-caption\">Acorn + Symfony : une base solide et lisible pour les exceptions. \u2014 <em>Forr\u00e1s: Roots.io<\/em><\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">2) Le confort maximal : Ignition (l\u2019erreur page \u201cLaravel\u201d)<\/h3>\n\n\n\n<p>Si tu viens de Laravel, <strong>Ignition<\/strong> te parlera tout de suite : c\u2019est la page d\u2019erreur par d\u00e9faut de Laravel depuis la v9. La nouveaut\u00e9 c\u00f4t\u00e9 Roots, c\u2019est qu\u2019avec <strong>Acorn v3<\/strong>, le support du routing \u201cfa\u00e7on Laravel\u201d implique aussi la compatibilit\u00e9 avec Ignition sur WordPress.<\/p>\n\n\n\n<p>Le r\u00e9sultat : une page d\u2019erreur tr\u00e8s riche, des stack traces bien pr\u00e9sent\u00e9es, et une ergonomie nettement sup\u00e9rieure quand tu dois comprendre vite pourquoi une requ\u00eate part en erreur.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"2560\" height=\"2252\" src=\"https:\/\/helloblog.io\/app\/uploads\/sites\/4\/2026\/01\/wp_debug-acorn-ignition-scaled.png\" alt=\"Page d\u2019erreur Acorn avec Ignition (Spatie) sur WordPress\" class=\"wp-image-154\" srcset=\"https:\/\/helloblog.io\/app\/uploads\/sites\/4\/2026\/01\/wp_debug-acorn-ignition-scaled.png 2560w, https:\/\/helloblog.io\/app\/uploads\/sites\/4\/2026\/01\/wp_debug-acorn-ignition-300x264.png 300w, https:\/\/helloblog.io\/app\/uploads\/sites\/4\/2026\/01\/wp_debug-acorn-ignition-1024x901.png 1024w, https:\/\/helloblog.io\/app\/uploads\/sites\/4\/2026\/01\/wp_debug-acorn-ignition-768x676.png 768w, https:\/\/helloblog.io\/app\/uploads\/sites\/4\/2026\/01\/wp_debug-acorn-ignition-1536x1351.png 1536w, https:\/\/helloblog.io\/app\/uploads\/sites\/4\/2026\/01\/wp_debug-acorn-ignition-2048x1802.png 2048w, https:\/\/helloblog.io\/app\/uploads\/sites\/4\/2026\/01\/wp_debug-acorn-ignition-400x352.png 400w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><figcaption class=\"wp-element-caption\">Ignition sur WordPress via Acorn : on se rapproche d\u2019une DX (developer experience) de framework. \u2014 <em>Forr\u00e1s: Roots.io<\/em><\/figcaption><\/figure>\n\n\n\n<p>Pour l\u2019installer (en d\u00e9pendance de dev), Roots recommande simplement d\u2019ex\u00e9cuter la commande Composer suivante depuis le dossier o\u00f9 Acorn est install\u00e9 :<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>composer require spatie\/laravel-ignition --dev\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#B392F0\">composer<\/span><span style=\"color:#9ECBFF\"> require<\/span><span style=\"color:#9ECBFF\"> spatie\/laravel-ignition<\/span><span style=\"color:#79B8FF\"> --dev<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div class=\"wp-block-group callout callout-warning is-style-warning is-layout-flow wp-block-group-is-layout-flow\" style=\"border-width:1px;border-radius:8px;padding-top:1rem;padding-right:1.5rem;padding-bottom:1rem;padding-left:1.5rem\">\n\n<h4 class=\"wp-block-heading callout-title\">Point d\u2019attention<\/h4>\n\n\n<p>Ignition est pens\u00e9 pour le d\u00e9veloppement. Garde-le en d\u00e9pendance <code>--dev<\/code> et assure-toi que l\u2019affichage des erreurs n\u2019est pas activ\u00e9 en production.<\/p>\n\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\">3) Whoops : l\u2019alternative historique (surtout si tu es encore sur Acorn v2)<\/h3>\n\n\n\n<p>Avant Acorn v3, le duo classique pour am\u00e9liorer la page d\u2019erreur, c\u2019\u00e9tait Acorn + <strong>Whoops<\/strong> (la librairie PHP d\u2019erreurs \u201cjoliment affich\u00e9es\u201d tr\u00e8s utilis\u00e9e). Si tu es encore sur Acorn v2, Roots indique qu\u2019il reste possible d\u2019am\u00e9liorer l\u2019exp\u00e9rience en installant Whoops, m\u00eame si la recommandation principale est plut\u00f4t de passer sur Acorn v3.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"2560\" height=\"2252\" src=\"https:\/\/helloblog.io\/app\/uploads\/sites\/4\/2026\/01\/wp_debug-acorn-whoops-scaled.png\" alt=\"Page d\u2019erreur Acorn avec Whoops\" class=\"wp-image-155\" srcset=\"https:\/\/helloblog.io\/app\/uploads\/sites\/4\/2026\/01\/wp_debug-acorn-whoops-scaled.png 2560w, https:\/\/helloblog.io\/app\/uploads\/sites\/4\/2026\/01\/wp_debug-acorn-whoops-300x264.png 300w, https:\/\/helloblog.io\/app\/uploads\/sites\/4\/2026\/01\/wp_debug-acorn-whoops-1024x901.png 1024w, https:\/\/helloblog.io\/app\/uploads\/sites\/4\/2026\/01\/wp_debug-acorn-whoops-768x676.png 768w, https:\/\/helloblog.io\/app\/uploads\/sites\/4\/2026\/01\/wp_debug-acorn-whoops-1536x1351.png 1536w, https:\/\/helloblog.io\/app\/uploads\/sites\/4\/2026\/01\/wp_debug-acorn-whoops-2048x1802.png 2048w, https:\/\/helloblog.io\/app\/uploads\/sites\/4\/2026\/01\/wp_debug-acorn-whoops-400x352.png 400w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><figcaption class=\"wp-element-caption\">Whoops : une page d\u2019erreur plus agr\u00e9able que l\u2019output brut, utile sur des stacks plus anciennes. \u2014 <em>Forr\u00e1s: Roots.io<\/em><\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Et si tu n\u2019utilises pas Acorn ? Deux options WordPress tr\u00e8s utiles<\/h2>\n\n\n\n<p>Tout le monde n\u2019a pas Acorn sur ses projets (m\u00eame si, objectivement, profiter d\u2019outils et d\u2019habitudes \u201cframework\u201d en PHP peut faire du bien). Si ton stack reste 100% WordPress classique, tu peux quand m\u00eame muscler ton debug avec des plugins d\u00e9di\u00e9s.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><a href=\"https:\/\/querymonitor.com\/\">Query Monitor<\/a> : g\u00e9n\u00e9ralement incontournable en local (requ\u00eates, hooks, erreurs, timings\u2026).<\/li>\n\n\n<li><a href=\"https:\/\/wordpress.org\/plugins\/debug-bar\/\">Debug Bar<\/a> : une barre de debug simple \u00e0 activer, pratique pour inspecter rapidement l\u2019ex\u00e9cution.<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Synth\u00e8se : la combinaison la plus efficace en dev<\/h2>\n\n\n\n<p>Pour une exp\u00e9rience de d\u00e9bogage WordPress vraiment confortable : active <code>WP_DEBUG<\/code> en environnement de dev, et, si ton projet s\u2019y pr\u00eate, utilise Acorn pour profiter d\u2019un rendu d\u2019exceptions moderne. Avec Acorn v3 + Ignition, tu te rapproches d\u2019une DX comparable \u00e0 Laravel tout en restant sur WordPress \u2014 ce qui change radicalement la vitesse \u00e0 laquelle tu identifies (et corriges) les erreurs.<\/p>\n\n\n<div class=\"references-section\">\n                <h2>R\u00e9f\u00e9rences \/ Sources<\/h2>\n                <ul class=\"references-list\"><li><a href=\"https:\/\/roots.io\/better-wordpress-debugging-with-acorn\/\" target=\"_blank\" rel=\"noopener noreferrer\">Better WordPress Debugging with Acorn<\/a><\/li><li><a href=\"https:\/\/roots.io\/bedrock\/\" target=\"_blank\" rel=\"noopener noreferrer\">Bedrock<\/a><\/li><li><a href=\"https:\/\/roots.io\/acorn\/docs\/error-handling\/#ignition\" target=\"_blank\" rel=\"noopener noreferrer\">Error handling &#8211; Acorn Docs<\/a><\/li><li><a href=\"https:\/\/roots.io\/acorn\/docs\/upgrading-acorn\/\" target=\"_blank\" rel=\"noopener noreferrer\">Upgrading Acorn &#8211; Acorn Docs<\/a><\/li><li><a href=\"https:\/\/github.com\/filp\/whoops\" target=\"_blank\" rel=\"noopener noreferrer\">whoops<\/a><\/li><li><a href=\"https:\/\/querymonitor.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Query Monitor<\/a><\/li><li><a href=\"https:\/\/wordpress.org\/plugins\/debug-bar\/\" target=\"_blank\" rel=\"noopener noreferrer\">Debug Bar<\/a><\/li><\/ul>\n            <\/div>","protected":false},"excerpt":{"rendered":"<p>WP_DEBUG te sauve la vie en local\u2026 mais son affichage \u201cbrut\u201d finit vite par te ralentir. Avec Acorn, tu peux obtenir des pages d\u2019erreur lisibles fa\u00e7on framework moderne (Symfony, Ignition) et gagner un vrai confort de debug sur WordPress.<\/p>\n","protected":false},"author":14,"featured_media":151,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[63],"tags":[4,73,8,72,10],"class_list":["post-156","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ecosysteme-wordpress","tag-acorn","tag-bedrock","tag-composer","tag-debug","tag-wordpress"],"_links":{"self":[{"href":"https:\/\/helloblog.io\/fr\/wp-json\/wp\/v2\/posts\/156","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/helloblog.io\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/helloblog.io\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/helloblog.io\/fr\/wp-json\/wp\/v2\/users\/14"}],"replies":[{"embeddable":true,"href":"https:\/\/helloblog.io\/fr\/wp-json\/wp\/v2\/comments?post=156"}],"version-history":[{"count":1,"href":"https:\/\/helloblog.io\/fr\/wp-json\/wp\/v2\/posts\/156\/revisions"}],"predecessor-version":[{"id":170,"href":"https:\/\/helloblog.io\/fr\/wp-json\/wp\/v2\/posts\/156\/revisions\/170"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/helloblog.io\/fr\/wp-json\/wp\/v2\/media\/151"}],"wp:attachment":[{"href":"https:\/\/helloblog.io\/fr\/wp-json\/wp\/v2\/media?parent=156"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/helloblog.io\/fr\/wp-json\/wp\/v2\/categories?post=156"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/helloblog.io\/fr\/wp-json\/wp\/v2\/tags?post=156"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}