{"id":135,"date":"2023-02-14T00:00:00","date_gmt":"2023-02-13T23:00:00","guid":{"rendered":"https:\/\/helloblog.io\/ro\/debugging-mai-bun-in-wordpress-cu-wp-debug-si-acorn\/"},"modified":"2026-01-20T06:32:56","modified_gmt":"2026-01-20T05:32:56","slug":"debugging-mai-bun-in-wordpress-cu-wp-debug-si-acorn","status":"publish","type":"post","link":"https:\/\/helloblog.io\/ro\/debugging-mai-bun-in-wordpress-cu-wp-debug-si-acorn\/","title":{"rendered":"Debugging mai bun \u00een WordPress cu WP_DEBUG + Acorn (Symfony, Ignition, Whoops)"},"content":{"rendered":"\n<p>\u00cen WordPress, primul pas c\u00e2nd vrei s\u0103 prinzi rapid <em>notice-uri<\/em>, <em>warnings<\/em> \u0219i erori fatale este s\u0103 rulezi cu <code>WP_DEBUG<\/code> activ. Problema: output-ul standard e minimal \u0219i, \u00een practic\u0103, te pune s\u0103 scanezi un perete de text direct \u00een pagin\u0103. Dac\u0103 lucrezi pe un stack modern cu Bedrock + Acorn, po\u021bi transforma complet experien\u021ba de debugging f\u0103r\u0103 s\u0103 schimbi modul \u00een care scrii pluginuri\/teme.<\/p>\n\n\n\n<p>Mai jos trecem prin: cum arat\u0103 output-ul default <code>WP_DEBUG<\/code>, ce aduce Acorn peste el (Symfony exception handler), cum ob\u021bii pagina de erori Ignition (Spatie\/Laravel) \u00een WordPress \u0219i ce alternative ai dac\u0103 nu folose\u0219ti Acorn.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">WP_DEBUG: de ce merit\u0103 s\u0103 fie mereu ON \u00een development<\/h2>\n\n\n\n<p><code>WP_DEBUG<\/code> este modul de debug al WordPress, activat prin constanta <code>WP_DEBUG<\/code> din configura\u021bie. \u00cen local (\u0219i, \u00een general, \u00een medii de development), e bine s\u0103 fie activ permanent ca s\u0103 prinzi din timp problemele care altfel ajung \u00een produc\u021bie sub form\u0103 de bug-uri greu de reprodus.<\/p>\n\n\n\n<p>Dac\u0103 folose\u0219ti Bedrock (boilerplate modern pentru WordPress, cu Composer), <code>WP_DEBUG<\/code> este deja activat implicit \u00een mediul de development, conform configura\u021biei din Bedrock.<\/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\">Ce \u00eenseamn\u0103 Acorn, pe scurt<\/h4>\n\n\n<p>Acorn este runtime-ul Roots care aduce \u00een WordPress o parte din ergonomia Laravel (container, config, helpers etc.). \u00cen contextul acestui articol, ne intereseaz\u0103 \u00een special \u00eembun\u0103t\u0103\u021birea paginilor de excep\u021bii atunci c\u00e2nd <code>WP_DEBUG<\/code> este activ.<\/p>\n\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Problema cu output-ul implicit WP_DEBUG<\/h2>\n\n\n\n<p>C\u00e2nd activezi <code>WP_DEBUG<\/code>, WordPress \u00ee\u021bi afi\u0219eaz\u0103 erorile\/notific\u0103rile direct \u00een HTML-ul paginii. E mai bine dec\u00e2t nimic, dar devine rapid greu de urm\u0103rit: ai pu\u021bin context, stack trace-ul nu e prezentat prietenos, iar debug-ul \u00eentr-un proiect mai mare devine obositor.<\/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\/10\/2026\/01\/wp_debug-default-scaled.png\" alt=\"Output-ul implicit WP_DEBUG \u00een WordPress, cu mesaje afi\u0219ate direct \u00een pagin\u0103\" class=\"wp-image-131\" srcset=\"https:\/\/helloblog.io\/app\/uploads\/sites\/10\/2026\/01\/wp_debug-default-scaled.png 2560w, https:\/\/helloblog.io\/app\/uploads\/sites\/10\/2026\/01\/wp_debug-default-300x264.png 300w, https:\/\/helloblog.io\/app\/uploads\/sites\/10\/2026\/01\/wp_debug-default-1024x901.png 1024w, https:\/\/helloblog.io\/app\/uploads\/sites\/10\/2026\/01\/wp_debug-default-768x676.png 768w, https:\/\/helloblog.io\/app\/uploads\/sites\/10\/2026\/01\/wp_debug-default-1536x1351.png 1536w, https:\/\/helloblog.io\/app\/uploads\/sites\/10\/2026\/01\/wp_debug-default-2048x1802.png 2048w, https:\/\/helloblog.io\/app\/uploads\/sites\/10\/2026\/01\/wp_debug-default-400x352.png 400w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><figcaption class=\"wp-element-caption\">A\u0219a arat\u0103, de obicei, mesajele WP_DEBUG f\u0103r\u0103 un handler de excep\u021bii mai prietenos. \u2014 <em>Forr\u00e1s: Roots.io<\/em><\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Cum \u00ee\u021bi schimb\u0103 Acorn experien\u021ba de debugging<\/h2>\n\n\n\n<p>Acorn \u00eembun\u0103t\u0103\u021be\u0219te output-ul de debug atunci c\u00e2nd sunt active <code>WP_DEBUG<\/code> \u0219i <code>WP_DEBUG_DISPLAY<\/code> (adic\u0103 atunci c\u00e2nd erorile sunt afi\u0219ate \u00een pagin\u0103). \u00cen locul afi\u0219\u0103rii brute, Acorn folose\u0219te, implicit, handler-ul de excep\u021bii din Symfony, care face mesajele \u0219i stack trace-ul mult mai lizibile.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1) Output-ul implicit Acorn (Symfony exception handler)<\/h3>\n\n\n\n<p>\u00cen setup-ul standard, Acorn se bazeaz\u0103 pe Symfony pentru pagina de excep\u021bii. C\u00e2\u0219tigi imediat: structur\u0103 mai clar\u0103, accent pe cauza erorii, stack trace mai u\u0219or de parcurs.<\/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\/10\/2026\/01\/wp_debug-acorn-symfony-scaled.png\" alt=\"Pagina de excep\u021bie Symfony afi\u0219at\u0103 \u00een WordPress prin Acorn\" class=\"wp-image-132\" srcset=\"https:\/\/helloblog.io\/app\/uploads\/sites\/10\/2026\/01\/wp_debug-acorn-symfony-scaled.png 2560w, https:\/\/helloblog.io\/app\/uploads\/sites\/10\/2026\/01\/wp_debug-acorn-symfony-300x264.png 300w, https:\/\/helloblog.io\/app\/uploads\/sites\/10\/2026\/01\/wp_debug-acorn-symfony-1024x901.png 1024w, https:\/\/helloblog.io\/app\/uploads\/sites\/10\/2026\/01\/wp_debug-acorn-symfony-768x676.png 768w, https:\/\/helloblog.io\/app\/uploads\/sites\/10\/2026\/01\/wp_debug-acorn-symfony-1536x1351.png 1536w, https:\/\/helloblog.io\/app\/uploads\/sites\/10\/2026\/01\/wp_debug-acorn-symfony-2048x1802.png 2048w, https:\/\/helloblog.io\/app\/uploads\/sites\/10\/2026\/01\/wp_debug-acorn-symfony-400x352.png 400w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><figcaption class=\"wp-element-caption\">Acorn + Symfony: o pagin\u0103 de excep\u021bii semnificativ mai u\u0219or de citit dec\u00e2t output-ul standard WP_DEBUG. \u2014 <em>Forr\u00e1s: Roots.io<\/em><\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">2) Ignition \u00een WordPress (pentru cine vine din Laravel)<\/h3>\n\n\n\n<p>Dac\u0103 ai lucrat cu Laravel, probabil \u021bi-e familiar Ignition: pagina de erori introdus\u0103 ca default \u00een Laravel (\u00eencep\u00e2nd cu v9). Odat\u0103 cu Acorn v3, suportul pentru routing \u00een stil Laravel deschide u\u0219a pentru Ignition \u0219i \u00een proiectele WordPress care ruleaz\u0103 pe Acorn.<\/p>\n\n\n\n<p>Practic, ob\u021bii o experien\u021b\u0103 de debugging foarte apropiat\u0103 de cea din Laravel: prezentare modern\u0103 a excep\u021biilor, context mai bun \u0219i navigare mai comod\u0103 prin stack trace.<\/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\/10\/2026\/01\/wp_debug-acorn-ignition-scaled.png\" alt=\"Ignition (Spatie) ca pagin\u0103 de erori \u00een WordPress prin Acorn\" class=\"wp-image-133\" srcset=\"https:\/\/helloblog.io\/app\/uploads\/sites\/10\/2026\/01\/wp_debug-acorn-ignition-scaled.png 2560w, https:\/\/helloblog.io\/app\/uploads\/sites\/10\/2026\/01\/wp_debug-acorn-ignition-300x264.png 300w, https:\/\/helloblog.io\/app\/uploads\/sites\/10\/2026\/01\/wp_debug-acorn-ignition-1024x901.png 1024w, https:\/\/helloblog.io\/app\/uploads\/sites\/10\/2026\/01\/wp_debug-acorn-ignition-768x676.png 768w, https:\/\/helloblog.io\/app\/uploads\/sites\/10\/2026\/01\/wp_debug-acorn-ignition-1536x1351.png 1536w, https:\/\/helloblog.io\/app\/uploads\/sites\/10\/2026\/01\/wp_debug-acorn-ignition-2048x1802.png 2048w, https:\/\/helloblog.io\/app\/uploads\/sites\/10\/2026\/01\/wp_debug-acorn-ignition-400x352.png 400w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><figcaption class=\"wp-element-caption\">Acorn v3 permite folosirea Ignition pentru un workflow de debug similar Laravel. \u2014 <em>Forr\u00e1s: Roots.io<\/em><\/figcaption><\/figure>\n\n\n\n<p>Instalarea Ignition (varianta recomandat\u0103 \u00een articolul Roots) se face ca dependen\u021b\u0103 de development, cu Composer, din acela\u0219i director \u00een care este instalat Acorn:<\/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\">Nu instala dependen\u021be de debug \u00een produc\u021bie<\/h4>\n\n\n<p>Ignition este recomandat ca dependen\u021b\u0103 de development (<code>--dev<\/code>). \u00cen produc\u021bie, afi\u0219area detaliilor complete ale erorilor poate expune informa\u021bii sensibile.<\/p>\n\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\">3) Whoops: op\u021biunea clasic\u0103 (mai ales pentru Acorn v2)<\/h3>\n\n\n\n<p>\u00cenainte de Acorn v3, recomandarea comun\u0103 \u00een ecosistemul Roots era whoops (o libr\u0103rie popular\u0103 de error handling \u00een PHP). Dac\u0103 e\u0219ti \u00eenc\u0103 pe Acorn v2, whoops r\u0103m\u00e2ne o solu\u021bie care poate oferi o experien\u021b\u0103 mai pl\u0103cut\u0103 dec\u00e2t pagina Symfony, de\u0219i recomandarea general\u0103 este migrarea la 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\/10\/2026\/01\/wp_debug-acorn-whoops-scaled.png\" alt=\"Whoops ca pagin\u0103 de erori \u00een WordPress prin Acorn\" class=\"wp-image-134\" srcset=\"https:\/\/helloblog.io\/app\/uploads\/sites\/10\/2026\/01\/wp_debug-acorn-whoops-scaled.png 2560w, https:\/\/helloblog.io\/app\/uploads\/sites\/10\/2026\/01\/wp_debug-acorn-whoops-300x264.png 300w, https:\/\/helloblog.io\/app\/uploads\/sites\/10\/2026\/01\/wp_debug-acorn-whoops-1024x901.png 1024w, https:\/\/helloblog.io\/app\/uploads\/sites\/10\/2026\/01\/wp_debug-acorn-whoops-768x676.png 768w, https:\/\/helloblog.io\/app\/uploads\/sites\/10\/2026\/01\/wp_debug-acorn-whoops-1536x1351.png 1536w, https:\/\/helloblog.io\/app\/uploads\/sites\/10\/2026\/01\/wp_debug-acorn-whoops-2048x1802.png 2048w, https:\/\/helloblog.io\/app\/uploads\/sites\/10\/2026\/01\/wp_debug-acorn-whoops-400x352.png 400w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><figcaption class=\"wp-element-caption\">Whoops poate \u00eembun\u0103t\u0103\u021bi vizibil debugging-ul, \u00een special \u00een proiecte mai vechi bazate pe Acorn v2. \u2014 <em>Forr\u00e1s: Roots.io<\/em><\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Dac\u0103 nu folose\u0219ti Acorn: alternative utile \u00een WordPress<\/h2>\n\n\n\n<p>Nu toate proiectele WordPress sunt pe Bedrock\/Acorn, iar asta e perfect ok. Dac\u0103 vrei totu\u0219i un debugging mai bun dec\u00e2t ce ofer\u0103 <code>WP_DEBUG<\/code> out of the box, exist\u0103 pluginuri care te ajut\u0103 s\u0103 investighezi ce se \u00eent\u00e2mpl\u0103 \u00een runtime.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><strong>Query Monitor<\/strong> \u2013 foarte util \u00een medii locale: interog\u0103ri, hooks, erori PHP, request-uri etc.<\/li>\n\n\n<li><strong>Debug Bar<\/strong> \u2013 o variant\u0103 clasic\u0103 pentru a expune informa\u021bii de debug \u00een admin bar.<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Concluzie: un workflow de debug mai aproape de \u201emodern PHP\u201d<\/h2>\n\n\n\n<p>WordPress \u00ee\u021bi d\u0103 un comutator simplu pentru debugging (<code>WP_DEBUG<\/code>), dar experien\u021ba standard r\u0103m\u00e2ne rudimentar\u0103. Cu Acorn, erorile devin mai u\u0219or de citit (Symfony) \u0219i, \u00een setup-urile compatibile, po\u021bi ajunge la nivelul de ergonomie oferit de Ignition. Iar dac\u0103 Acorn nu e \u00een stack-ul t\u0103u, Query Monitor \u0219i Debug Bar r\u0103m\u00e2n dou\u0103 op\u021biuni solide pentru un mediu local s\u0103n\u0103tos.<\/p>\n\n\n<div class=\"references-section\">\n                <h2>Referin\u021be \/ Surse<\/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 Documentation<\/a><\/li><li><a href=\"https:\/\/roots.io\/acorn\/docs\/upgrading-acorn\/\" target=\"_blank\" rel=\"noopener noreferrer\">Upgrading Acorn &#8211; Acorn Documentation<\/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><li><a href=\"https:\/\/github.com\/filp\/whoops\" target=\"_blank\" rel=\"noopener noreferrer\">whoops<\/a><\/li><\/ul>\n            <\/div>","protected":false},"excerpt":{"rendered":"<p>WP_DEBUG e obligatoriu \u00een dezvoltare, dar afi\u0219area implicit\u0103 a erorilor \u00een WordPress e greu de urm\u0103rit. Cu Acorn po\u021bi ob\u021bine pagini de excep\u021bii mult mai clare (Symfony) sau chiar experien\u021ba Ignition, familiar\u0103 din Laravel.<\/p>\n","protected":false},"author":32,"featured_media":130,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[18],"tags":[4,69,8,10,74],"class_list":["post-135","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ecosistem-wordpress","tag-acorn","tag-bedrock","tag-composer","tag-wordpress","tag-wp_debug"],"_links":{"self":[{"href":"https:\/\/helloblog.io\/ro\/wp-json\/wp\/v2\/posts\/135","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/helloblog.io\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/helloblog.io\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/helloblog.io\/ro\/wp-json\/wp\/v2\/users\/32"}],"replies":[{"embeddable":true,"href":"https:\/\/helloblog.io\/ro\/wp-json\/wp\/v2\/comments?post=135"}],"version-history":[{"count":1,"href":"https:\/\/helloblog.io\/ro\/wp-json\/wp\/v2\/posts\/135\/revisions"}],"predecessor-version":[{"id":149,"href":"https:\/\/helloblog.io\/ro\/wp-json\/wp\/v2\/posts\/135\/revisions\/149"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/helloblog.io\/ro\/wp-json\/wp\/v2\/media\/130"}],"wp:attachment":[{"href":"https:\/\/helloblog.io\/ro\/wp-json\/wp\/v2\/media?parent=135"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/helloblog.io\/ro\/wp-json\/wp\/v2\/categories?post=135"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/helloblog.io\/ro\/wp-json\/wp\/v2\/tags?post=135"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}