{"id":152,"date":"2023-02-14T00:00:00","date_gmt":"2023-02-13T23:00:00","guid":{"rendered":"https:\/\/helloblog.io\/pt\/debug-wordpress-com-acorn-melhorando-wp-debug\/"},"modified":"2026-01-20T06:32:53","modified_gmt":"2026-01-20T05:32:53","slug":"debug-wordpress-com-acorn-melhorando-wp-debug","status":"publish","type":"post","link":"https:\/\/helloblog.io\/pt\/debug-wordpress-com-acorn-melhorando-wp-debug\/","title":{"rendered":"Debug no WordPress sem sofrimento: como o Acorn melhora o WP_DEBUG"},"content":{"rendered":"\n<p>Se desenvolves temas ou plugins para WordPress, h\u00e1 uma regra simples que evita perder horas a adivinhar: no ambiente local, <code>WP_DEBUG<\/code> tem de estar ligado. O problema \u00e9 que o output padr\u00e3o do WordPress \u00e9\u2026 funcional, mas pouco amig\u00e1vel. Mostra notices e erros diretamente na p\u00e1gina, sem grande contexto, stack trace decente ou uma apresenta\u00e7\u00e3o que ajude mesmo a localizar a origem do problema.<\/p>\n\n\n\n<p>Neste artigo vou explicar como o <strong>Acorn<\/strong> (a camada Laravel-friendly do ecossistema Roots) melhora significativamente a experi\u00eancia de debugging quando <code>WP_DEBUG<\/code> est\u00e1 ativo \u2014 e quais s\u00e3o as alternativas quando n\u00e3o est\u00e1s a usar Acorn.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">O essencial do WP_DEBUG (e porque deve estar sempre ligado em desenvolvimento)<\/h2>\n\n\n\n<p>O WordPress tem um modo de debug controlado pela constante <code>WP_DEBUG<\/code>. Quando est\u00e1 ativo, o runtime passa a expor <strong>notices<\/strong>, <strong>warnings<\/strong> e <strong>fatal errors<\/strong> que muitas vezes ficam silenciosos em produ\u00e7\u00e3o. Isto \u00e9 especialmente importante no ecossistema WordPress, onde \u00e9 comum encontrar c\u00f3digo de terceiros a emitir notices \u2014 e isso pode mascarar problemas reais no teu c\u00f3digo.<\/p>\n\n\n\n<p>Se trabalhas com <strong>Bedrock<\/strong> (o boilerplate moderno da Roots que organiza o WordPress com Composer), a boa not\u00edcia \u00e9 que, por defeito, o debug j\u00e1 vem preparado para ambientes de desenvolvimento, o que ajuda a manter consist\u00eancia entre projetos e m\u00e1quinas.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Porque o output padr\u00e3o do WP_DEBUG n\u00e3o chega para projetos mais s\u00e9rios<\/h2>\n\n\n\n<p>O comportamento t\u00edpico do WordPress, com <code>WP_DEBUG<\/code> e <code>WP_DEBUG_DISPLAY<\/code> ligados, \u00e9 despejar a mensagem do erro diretamente no HTML da p\u00e1gina. \u00c9 melhor do que nada, mas na pr\u00e1tica tens tr\u00eas dores recorrentes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Pouco contexto: muitas mensagens aparecem sem um stack trace realmente \u00fatil.<\/li>\n\n\n<li>Baixa legibilidade: erros misturam-se com o markup e quebram a leitura.<\/li>\n\n\n<li>Diagn\u00f3stico lento: entre includes, hooks e templates, encontrar a origem exata pode ser penoso.<\/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\/9\/2026\/01\/wp_debug-default-scaled.png\" alt=\"Exemplo do output padr\u00e3o do WP_DEBUG no WordPress, mostrando notices diretamente no ecr\u00e3\" class=\"wp-image-146\" srcset=\"https:\/\/helloblog.io\/app\/uploads\/sites\/9\/2026\/01\/wp_debug-default-scaled.png 2560w, https:\/\/helloblog.io\/app\/uploads\/sites\/9\/2026\/01\/wp_debug-default-300x264.png 300w, https:\/\/helloblog.io\/app\/uploads\/sites\/9\/2026\/01\/wp_debug-default-1024x901.png 1024w, https:\/\/helloblog.io\/app\/uploads\/sites\/9\/2026\/01\/wp_debug-default-768x676.png 768w, https:\/\/helloblog.io\/app\/uploads\/sites\/9\/2026\/01\/wp_debug-default-1536x1351.png 1536w, https:\/\/helloblog.io\/app\/uploads\/sites\/9\/2026\/01\/wp_debug-default-2048x1802.png 2048w, https:\/\/helloblog.io\/app\/uploads\/sites\/9\/2026\/01\/wp_debug-default-400x352.png 400w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><figcaption class=\"wp-element-caption\">O WP_DEBUG padr\u00e3o \u00e9 direto, mas pouco leg\u00edvel e com contexto limitado. \u2014 <em>Forr\u00e1s: Roots.io<\/em><\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">O que o Acorn muda quando o WP_DEBUG est\u00e1 ativo<\/h2>\n\n\n\n<p>O <strong>Acorn<\/strong> melhora o output do <code>WP_DEBUG<\/code> quando <code>WP_DEBUG && WP_DEBUG_DISPLAY<\/code> est\u00e3o ligados. Na pr\u00e1tica, ele substitui aquela experi\u00eancia \u201craw\u201d por um handler de exce\u00e7\u00f5es mais moderno, com p\u00e1ginas de erro bem estruturadas.<\/p>\n\n\n\n<p>Isto \u00e9 particularmente interessante em projetos onde j\u00e1 existe uma cultura Laravel: o Acorn permite trazer padr\u00f5es e ergonomia do Laravel para dentro do WordPress (incluindo helpers e uma organiza\u00e7\u00e3o de c\u00f3digo mais \u201caplica\u00e7\u00e3o\u201d).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Output por defeito do Acorn: handler do Symfony<\/h3>\n\n\n\n<p>Por defeito, o Acorn utiliza o <strong>Symfony exception handler<\/strong>, que apresenta erros e exce\u00e7\u00f5es de forma muito mais leg\u00edvel do que o output nativo do WordPress. Ganha-se rapidamente em clareza: mensagem, localiza\u00e7\u00e3o, stack trace e um layout que n\u00e3o te obriga a vasculhar HTML partido.<\/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\/9\/2026\/01\/wp_debug-acorn-symfony-scaled.png\" alt=\"P\u00e1gina de erro do Acorn usando o Symfony exception handler com stack trace e informa\u00e7\u00e3o estruturada\" class=\"wp-image-147\" srcset=\"https:\/\/helloblog.io\/app\/uploads\/sites\/9\/2026\/01\/wp_debug-acorn-symfony-scaled.png 2560w, https:\/\/helloblog.io\/app\/uploads\/sites\/9\/2026\/01\/wp_debug-acorn-symfony-300x264.png 300w, https:\/\/helloblog.io\/app\/uploads\/sites\/9\/2026\/01\/wp_debug-acorn-symfony-1024x901.png 1024w, https:\/\/helloblog.io\/app\/uploads\/sites\/9\/2026\/01\/wp_debug-acorn-symfony-768x676.png 768w, https:\/\/helloblog.io\/app\/uploads\/sites\/9\/2026\/01\/wp_debug-acorn-symfony-1536x1351.png 1536w, https:\/\/helloblog.io\/app\/uploads\/sites\/9\/2026\/01\/wp_debug-acorn-symfony-2048x1802.png 2048w, https:\/\/helloblog.io\/app\/uploads\/sites\/9\/2026\/01\/wp_debug-acorn-symfony-400x352.png 400w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><figcaption class=\"wp-element-caption\">Com Acorn, o output do WP_DEBUG torna-se mais informativo e f\u00e1cil de ler. \u2014 <em>Forr\u00e1s: Roots.io<\/em><\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Com Ignition: uma experi\u00eancia ao estilo Laravel (Acorn v3)<\/h3>\n\n\n\n<p>Se vens do Laravel, provavelmente j\u00e1 conheces o <strong>Ignition<\/strong> \u2014 a p\u00e1gina de erro padr\u00e3o do Laravel desde a vers\u00e3o 9. A partir do <strong>Acorn v3<\/strong>, com suporte a routing no estilo Laravel, o Ignition tamb\u00e9m passa a ser suportado em sites WordPress que usam Acorn. Para muitos workflows, \u00e9 a melhor experi\u00eancia de tratamento de erros dispon\u00edvel neste contexto.<\/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\/9\/2026\/01\/wp_debug-acorn-ignition-scaled.png\" alt=\"P\u00e1gina de erro do Acorn com Ignition, semelhante ao debug do Laravel, com stack trace e detalhes da exce\u00e7\u00e3o\" class=\"wp-image-148\" srcset=\"https:\/\/helloblog.io\/app\/uploads\/sites\/9\/2026\/01\/wp_debug-acorn-ignition-scaled.png 2560w, https:\/\/helloblog.io\/app\/uploads\/sites\/9\/2026\/01\/wp_debug-acorn-ignition-300x264.png 300w, https:\/\/helloblog.io\/app\/uploads\/sites\/9\/2026\/01\/wp_debug-acorn-ignition-1024x901.png 1024w, https:\/\/helloblog.io\/app\/uploads\/sites\/9\/2026\/01\/wp_debug-acorn-ignition-768x676.png 768w, https:\/\/helloblog.io\/app\/uploads\/sites\/9\/2026\/01\/wp_debug-acorn-ignition-1536x1351.png 1536w, https:\/\/helloblog.io\/app\/uploads\/sites\/9\/2026\/01\/wp_debug-acorn-ignition-2048x1802.png 2048w, https:\/\/helloblog.io\/app\/uploads\/sites\/9\/2026\/01\/wp_debug-acorn-ignition-400x352.png 400w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><figcaption class=\"wp-element-caption\">Ignition no WordPress via Acorn v3: uma experi\u00eancia muito pr\u00f3xima do Laravel. \u2014 <em>Forr\u00e1s: Roots.io<\/em><\/figcaption><\/figure>\n\n\n\n<p>Para come\u00e7ares a usar Ignition num projeto WordPress com Acorn, instala-o via Composer (nota: como depend\u00eancia de desenvolvimento) a partir da mesma diretoria onde o Acorn est\u00e1 instalado:<\/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-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\">Quando isto faz diferen\u00e7a a s\u00e9rio<\/h4>\n\n\n<p>Ignition brilha quando est\u00e1s a iterar rapidamente em c\u00f3digo PHP (temas, custom plugins, integra\u00e7\u00e3o com servi\u00e7os) e queres reduzir o tempo entre \u201crebentou\u201d e \u201cj\u00e1 sei onde \u00e9\u201d. A legibilidade do stack trace e o contexto apresentado fazem mesmo diferen\u00e7a no dia a dia.<\/p>\n\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\">E o whoops? (especialmente relevante para Acorn v2)<\/h3>\n\n\n\n<p>Antes do Acorn v3, era comum emparelhar o Acorn com o <strong>whoops<\/strong> (biblioteca de error pages para PHP) para melhorar o debug em WordPress. Em projetos ainda em <strong>Acorn v2<\/strong>, continua a ser uma op\u00e7\u00e3o para ter uma experi\u00eancia superior \u00e0 p\u00e1gina padr\u00e3o do Symfony \u2014 embora a recomenda\u00e7\u00e3o da Roots seja atualizar para o Acorn v3 quando poss\u00edvel.<\/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\/9\/2026\/01\/wp_debug-acorn-whoops-scaled.png\" alt=\"Output do WP_DEBUG com Acorn e whoops, exibindo uma p\u00e1gina de erro mais rica do que a padr\u00e3o do WordPress\" class=\"wp-image-150\" srcset=\"https:\/\/helloblog.io\/app\/uploads\/sites\/9\/2026\/01\/wp_debug-acorn-whoops-scaled.png 2560w, https:\/\/helloblog.io\/app\/uploads\/sites\/9\/2026\/01\/wp_debug-acorn-whoops-300x264.png 300w, https:\/\/helloblog.io\/app\/uploads\/sites\/9\/2026\/01\/wp_debug-acorn-whoops-1024x901.png 1024w, https:\/\/helloblog.io\/app\/uploads\/sites\/9\/2026\/01\/wp_debug-acorn-whoops-768x676.png 768w, https:\/\/helloblog.io\/app\/uploads\/sites\/9\/2026\/01\/wp_debug-acorn-whoops-1536x1351.png 1536w, https:\/\/helloblog.io\/app\/uploads\/sites\/9\/2026\/01\/wp_debug-acorn-whoops-2048x1802.png 2048w, https:\/\/helloblog.io\/app\/uploads\/sites\/9\/2026\/01\/wp_debug-acorn-whoops-400x352.png 400w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><figcaption class=\"wp-element-caption\">whoops \u00e9 uma alternativa v\u00e1lida em setups mais antigos, como Acorn v2. \u2014 <em>Forr\u00e1s: Roots.io<\/em><\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Se n\u00e3o usas Acorn: alternativas no ecossistema WordPress<\/h2>\n\n\n\n<p>Nem todos os projetos v\u00e3o estar em Bedrock\/Acorn, e est\u00e1 tudo bem. Ainda assim, d\u00e1 para melhorar bastante o teu ambiente local com plugins de debugging focados no WordPress. Dois cl\u00e1ssicos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><a href=\"https:\/\/querymonitor.com\/\">Query Monitor<\/a> \u2014 para muitos, ferramenta obrigat\u00f3ria em qualquer WordPress local; ajuda a inspecionar queries, hooks, timings, erros PHP e muito mais.<\/li>\n\n\n<li><a href=\"https:\/\/wordpress.org\/plugins\/debug-bar\/\">Debug Bar<\/a> \u2014 adiciona uma barra de debug com informa\u00e7\u00e3o \u00fatil para diagn\u00f3stico durante o desenvolvimento.<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Resumo pr\u00e1tico<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li>Mant\u00e9m <code>WP_DEBUG<\/code> ligado em desenvolvimento para apanhar notices e erros cedo.<\/li>\n\n\n<li>O output nativo do WordPress \u00e9 limitado e pouco leg\u00edvel em projetos maiores.<\/li>\n\n\n<li>Com Acorn, ganhas um handler moderno (Symfony) e, no Acorn v3, podes usar Ignition para uma experi\u00eancia ainda melhor.<\/li>\n\n\n<li>Se n\u00e3o usas Acorn, Query Monitor e Debug Bar continuam a ser escolhas s\u00f3lidas para depurar com mais contexto.<\/li>\n\n<\/ol>\n\n\n<div class=\"references-section\">\n                <h2>Refer\u00eancias \/ Fontes<\/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:\/\/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>O `WP_DEBUG` \u00e9 obrigat\u00f3rio no ambiente local, mas a forma \u201ccrua\u201d como o WordPress mostra erros nem ajuda muito. Com Acorn, o debug fica mais leg\u00edvel e pr\u00f3ximo da experi\u00eancia que muitos j\u00e1 conhecem do ecossistema Laravel.<\/p>\n","protected":false},"author":29,"featured_media":145,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[22],"tags":[4,62,8,67,10],"class_list":["post-152","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ecossistema-wordpress","tag-acorn","tag-bedrock","tag-composer","tag-debug","tag-wordpress"],"_links":{"self":[{"href":"https:\/\/helloblog.io\/pt\/wp-json\/wp\/v2\/posts\/152","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/helloblog.io\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/helloblog.io\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/helloblog.io\/pt\/wp-json\/wp\/v2\/users\/29"}],"replies":[{"embeddable":true,"href":"https:\/\/helloblog.io\/pt\/wp-json\/wp\/v2\/comments?post=152"}],"version-history":[{"count":1,"href":"https:\/\/helloblog.io\/pt\/wp-json\/wp\/v2\/posts\/152\/revisions"}],"predecessor-version":[{"id":166,"href":"https:\/\/helloblog.io\/pt\/wp-json\/wp\/v2\/posts\/152\/revisions\/166"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/helloblog.io\/pt\/wp-json\/wp\/v2\/media\/145"}],"wp:attachment":[{"href":"https:\/\/helloblog.io\/pt\/wp-json\/wp\/v2\/media?parent=152"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/helloblog.io\/pt\/wp-json\/wp\/v2\/categories?post=152"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/helloblog.io\/pt\/wp-json\/wp\/v2\/tags?post=152"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}