{"id":133,"date":"2023-02-14T00:00:00","date_gmt":"2023-02-13T23:00:00","guid":{"rendered":"https:\/\/helloblog.io\/da\/bedre-wordpress-debugging-med-acorn\/"},"modified":"2026-01-20T06:33:21","modified_gmt":"2026-01-20T05:33:21","slug":"bedre-wordpress-debugging-med-acorn","status":"publish","type":"post","link":"https:\/\/helloblog.io\/da\/bedre-wordpress-debugging-med-acorn\/","title":{"rendered":"Bedre WordPress-debugging med Acorn: fra r\u00e5 WP_DEBUG til fejlsider, der giver mening"},"content":{"rendered":"\n<p>WordPress har en debug-mode, <code>WP_DEBUG<\/code>, som de fleste af os sl\u00e5r til i lokale milj\u00f8er for at fange notices, warnings og egentlige fejl tidligt. Problemet er bare, at standardm\u00e5den WordPress viser fejl p\u00e5, ofte ender som en ustruktureret blok tekst direkte i markupen \u2014 og s\u00e5 bruger du mere tid p\u00e5 at afkode fejlen end p\u00e5 at l\u00f8se den.<\/p>\n\n\n\n<p>Hvis du bygger WordPress-sites med Roots-stacken (fx Bedrock og Acorn), kan du f\u00e5 en markant bedre fejloplevelse: mere l\u00e6sbare stack traces, tydelig kontekst og et output, der minder om moderne PHP-frameworks. Her er, hvordan det h\u00e6nger sammen, og hvilke muligheder du har.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Hvorfor WP_DEBUG stadig er v\u00e6rd at k\u00f8re med (selvom det larmer)<\/h2>\n\n\n\n<p><code>WP_DEBUG<\/code> er WordPress\u2019 indbyggede switch til at logge og vise PHP-fejl\/meddelelser. Den b\u00f8r v\u00e6re sl\u00e5et til i lokale udviklingsmilj\u00f8er, fordi den afsl\u00f8rer ting, som ellers bliver overset: uinitialiserede variabler, deprecated calls, \u201cheader already sent\u201d, osv.<\/p>\n\n\n\n<p>S\u00e6rligt i WordPress-\u00f8kosystemet, hvor themes og plugins i praksis kan komme fra alle mulige kvalitetsniveauer, er <code>WP_DEBUG<\/code> en effektiv r\u00f8galarm. Det er ogs\u00e5 derfor Bedrock (Roots\u2019 moderne WordPress-boilerplate med Composer) typisk har debug aktiveret i development-konfigurationen som udgangspunkt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Standard WP_DEBUG-output: bedre end ingenting, men ikke ret brugbart<\/h2>\n\n\n\n<p>N\u00e5r <code>WP_DEBUG<\/code> er sl\u00e5et til, vil WordPress som udgangspunkt bare dumpe fejl og notices direkte p\u00e5 siden. Det kan v\u00e6re fint til den hurtige \u201chvad gik galt?\u201d, men det giver sj\u00e6ldent en god arbejdsgang: stack traces kan v\u00e6re sv\u00e6re at l\u00e6se, og pr\u00e6sentationen passer d\u00e5rligt ind p\u00e5 siden (og kan i v\u00e6rste fald \u00f8del\u00e6gge HTML-outputtet).<\/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\/14\/2026\/01\/wp_debug-default-scaled.png\" alt=\"Standard WP_DEBUG-output i WordPress, hvor fejl vises som r\u00e5 tekst p\u00e5 siden\" class=\"wp-image-129\" srcset=\"https:\/\/helloblog.io\/app\/uploads\/sites\/14\/2026\/01\/wp_debug-default-scaled.png 2560w, https:\/\/helloblog.io\/app\/uploads\/sites\/14\/2026\/01\/wp_debug-default-300x264.png 300w, https:\/\/helloblog.io\/app\/uploads\/sites\/14\/2026\/01\/wp_debug-default-1024x901.png 1024w, https:\/\/helloblog.io\/app\/uploads\/sites\/14\/2026\/01\/wp_debug-default-768x676.png 768w, https:\/\/helloblog.io\/app\/uploads\/sites\/14\/2026\/01\/wp_debug-default-1536x1351.png 1536w, https:\/\/helloblog.io\/app\/uploads\/sites\/14\/2026\/01\/wp_debug-default-2048x1802.png 2048w, https:\/\/helloblog.io\/app\/uploads\/sites\/14\/2026\/01\/wp_debug-default-400x352.png 400w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><figcaption class=\"wp-element-caption\">Standard WP_DEBUG: r\u00e5 fejltekst direkte i outputtet. \u2014 <em>Forr\u00e1s: Roots.io<\/em><\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Acorn: n\u00e5r WordPress f\u00e5r en mere moderne fejloplevelse<\/h2>\n\n\n\n<p>Acorn er Roots\u2019 integration af Laravel-komponenter i WordPress. N\u00e5r du k\u00f8rer med Acorn, kan den forbedre din fejlvisning, n\u00e5r b\u00e5de <code>WP_DEBUG<\/code> og <code>WP_DEBUG_DISPLAY<\/code> er aktiveret. Det betyder i praksis, at du f\u00e5r en rigtig exception handler i stedet for WordPress\u2019 r\u00e5 output.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Acorns standard: Symfony exception handler<\/h3>\n\n\n\n<p>Out of the box bruger Acorn Symfony\u2019s exception handler. Den giver en mere struktureret pr\u00e6sentation af exceptions, s\u00e5 du hurtigere kan finde \u00e5rsag, fil og linjenummer \u2014 uden at skulle \u201cl\u00e6se\u201d dig igennem en mur af tekst.<\/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\/14\/2026\/01\/wp_debug-acorn-symfony-scaled.png\" alt=\"Acorn WP_DEBUG-output med Symfony exception handler, som viser mere l\u00e6sbar fejlvisning\" class=\"wp-image-130\" srcset=\"https:\/\/helloblog.io\/app\/uploads\/sites\/14\/2026\/01\/wp_debug-acorn-symfony-scaled.png 2560w, https:\/\/helloblog.io\/app\/uploads\/sites\/14\/2026\/01\/wp_debug-acorn-symfony-300x264.png 300w, https:\/\/helloblog.io\/app\/uploads\/sites\/14\/2026\/01\/wp_debug-acorn-symfony-1024x901.png 1024w, https:\/\/helloblog.io\/app\/uploads\/sites\/14\/2026\/01\/wp_debug-acorn-symfony-768x676.png 768w, https:\/\/helloblog.io\/app\/uploads\/sites\/14\/2026\/01\/wp_debug-acorn-symfony-1536x1351.png 1536w, https:\/\/helloblog.io\/app\/uploads\/sites\/14\/2026\/01\/wp_debug-acorn-symfony-2048x1802.png 2048w, https:\/\/helloblog.io\/app\/uploads\/sites\/14\/2026\/01\/wp_debug-acorn-symfony-400x352.png 400w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><figcaption class=\"wp-element-caption\">Acorn med Symfony exception handler: mere l\u00e6sbart og struktureret. \u2014 <em>Forr\u00e1s: Roots.io<\/em><\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Ignition: Laravel-fejlsiden p\u00e5 WordPress (n\u00e5r du bruger Acorn v3)<\/h3>\n\n\n\n<p>Hvis du kommer fra Laravel, kender du sandsynligvis Ignition \u2014 den fejlside der siden Laravel v9 har v\u00e6ret standardoplevelsen ved exceptions. Med Acorn v3 kom support for routing i Laravel-stil, og det \u00e5bner ogs\u00e5 for at bruge Ignition p\u00e5 WordPress-sites, der k\u00f8rer Acorn.<\/p>\n\n\n\n<p>I praksis giver Ignition den mest behagelige debugging-oplevelse: overskuelig fejlvisning, tydelige stack frames og et UI, der g\u00f8r det nemt at navigere i, hvad der faktisk skete.<\/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\/14\/2026\/01\/wp_debug-acorn-ignition-scaled.png\" alt=\"Acorn WP_DEBUG-output med Ignition, som ligner Laravels fejlside\" class=\"wp-image-131\" srcset=\"https:\/\/helloblog.io\/app\/uploads\/sites\/14\/2026\/01\/wp_debug-acorn-ignition-scaled.png 2560w, https:\/\/helloblog.io\/app\/uploads\/sites\/14\/2026\/01\/wp_debug-acorn-ignition-300x264.png 300w, https:\/\/helloblog.io\/app\/uploads\/sites\/14\/2026\/01\/wp_debug-acorn-ignition-1024x901.png 1024w, https:\/\/helloblog.io\/app\/uploads\/sites\/14\/2026\/01\/wp_debug-acorn-ignition-768x676.png 768w, https:\/\/helloblog.io\/app\/uploads\/sites\/14\/2026\/01\/wp_debug-acorn-ignition-1536x1351.png 1536w, https:\/\/helloblog.io\/app\/uploads\/sites\/14\/2026\/01\/wp_debug-acorn-ignition-2048x1802.png 2048w, https:\/\/helloblog.io\/app\/uploads\/sites\/14\/2026\/01\/wp_debug-acorn-ignition-400x352.png 400w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><figcaption class=\"wp-element-caption\">Acorn + Ignition: Laravel-agtig fejlside p\u00e5 et WordPress-site. \u2014 <em>Forr\u00e1s: Roots.io<\/em><\/figcaption><\/figure>\n\n\n\n<p>For at tage Ignition i brug p\u00e5 et WordPress-projekt med Acorn, installerer du pakken som en development dependency fra den mappe, hvor Acorn er installeret:<\/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\">Hvorn\u00e5r giver Ignition mening?<\/h4>\n\n\n<p>Ignition er is\u00e6r oplagt, hvis du i forvejen arbejder Laravel-agtigt i dit WordPress-projekt (fx Sage\/Acorn) og vil have samme fejloplevelse p\u00e5 tv\u00e6rs af projekter.<\/p>\n\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Whoops: den klassiske forbedring (is\u00e6r relevant f\u00f8r Acorn v3)<\/h3>\n\n\n\n<p>F\u00f8r Acorn v3 var anbefalingen typisk at bruge whoops sammen med Acorn for at f\u00e5 bedre fejlsider end Symfony-udgaven. Hvis du stadig sidder p\u00e5 Acorn v2, kan whoops stadig v\u00e6re en klar opgradering i dagligdagen, selvom det generelt giver mening at kigge p\u00e5 en opgradering til 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\/14\/2026\/01\/wp_debug-acorn-whoops-scaled.png\" alt=\"Acorn WP_DEBUG-output med Whoops, som viser en mere brugervenlig fejl-side\" class=\"wp-image-132\" srcset=\"https:\/\/helloblog.io\/app\/uploads\/sites\/14\/2026\/01\/wp_debug-acorn-whoops-scaled.png 2560w, https:\/\/helloblog.io\/app\/uploads\/sites\/14\/2026\/01\/wp_debug-acorn-whoops-300x264.png 300w, https:\/\/helloblog.io\/app\/uploads\/sites\/14\/2026\/01\/wp_debug-acorn-whoops-1024x901.png 1024w, https:\/\/helloblog.io\/app\/uploads\/sites\/14\/2026\/01\/wp_debug-acorn-whoops-768x676.png 768w, https:\/\/helloblog.io\/app\/uploads\/sites\/14\/2026\/01\/wp_debug-acorn-whoops-1536x1351.png 1536w, https:\/\/helloblog.io\/app\/uploads\/sites\/14\/2026\/01\/wp_debug-acorn-whoops-2048x1802.png 2048w, https:\/\/helloblog.io\/app\/uploads\/sites\/14\/2026\/01\/wp_debug-acorn-whoops-400x352.png 400w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><figcaption class=\"wp-element-caption\">Acorn + whoops: stadig en solid fejloplevelse, s\u00e6rligt i \u00e6ldre setups. \u2014 <em>Forr\u00e1s: Roots.io<\/em><\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Hvis du ikke bruger Acorn: to praktiske alternativer<\/h2>\n\n\n\n<p>Der findes ogs\u00e5 solide v\u00e6rkt\u00f8jer, hvis du k\u00f8rer \u201cklassisk\u201d WordPress uden Acorn. To plugins, der ofte er v\u00e6rd at have i v\u00e6rkt\u00f8jskassen lokalt:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Query Monitor \u2013 ekstremt nyttigt i lokale milj\u00f8er til at inspicere queries, hooks, HTTP-kald, PHP-errors og performance.<\/li>\n\n\n<li>Debug Bar \u2013 en enkel debug-toolbar, der g\u00f8r det nemmere at se relevante debug-informationer uden at rode i outputtet.<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Praktisk opsummering<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li>K\u00f8r med <code>WP_DEBUG<\/code> i dine lokale milj\u00f8er for at fange fejl tidligt.<\/li>\n\n\n<li>Acorn kan forbedre fejlvisningen markant, n\u00e5r <code>WP_DEBUG && WP_DEBUG_DISPLAY<\/code> er aktiveret.<\/li>\n\n\n<li>Standard i Acorn er Symfony exception handler \u2014 en klar forbedring i l\u00e6sbarhed.<\/li>\n\n\n<li>Med Acorn v3 kan du bruge Ignition (spatie\/laravel-ignition) og f\u00e5 en Laravel-lignende fejlside.<\/li>\n\n\n<li>P\u00e5 \u00e6ldre setups kan whoops stadig give en bedre oplevelse end standardfejlsider.<\/li>\n\n\n<li>Uden Acorn er Query Monitor og Debug Bar gode bud p\u00e5 et mere produktivt debug-setup.<\/li>\n\n<\/ol>\n\n\n<div class=\"references-section\">\n                <h2>Referencer \/ Kilder<\/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:\/\/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><li><a href=\"https:\/\/discourse.roots.io\/t\/-\/24809\" target=\"_blank\" rel=\"noopener noreferrer\">Discuss this post on Roots Discourse<\/a><\/li><\/ul>\n            <\/div>","protected":false},"excerpt":{"rendered":"<p>WP_DEBUG er et must lokalt, men standard-outputtet er \u00e6rligt talt sv\u00e6rt at arbejde med. Med Acorn kan du f\u00e5 Symfony-, Ignition- eller Whoops-fejlsider, der g\u00f8r PHP-fejl langt hurtigere at forst\u00e5 og rette.<\/p>\n","protected":false},"author":65,"featured_media":128,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[22],"tags":[3,67,74,30,10],"class_list":["post-133","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-wordpress-okosystem","tag-acorn","tag-bedrock","tag-debugging","tag-php","tag-wordpress"],"_links":{"self":[{"href":"https:\/\/helloblog.io\/da\/wp-json\/wp\/v2\/posts\/133","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/helloblog.io\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/helloblog.io\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/helloblog.io\/da\/wp-json\/wp\/v2\/users\/65"}],"replies":[{"embeddable":true,"href":"https:\/\/helloblog.io\/da\/wp-json\/wp\/v2\/comments?post=133"}],"version-history":[{"count":1,"href":"https:\/\/helloblog.io\/da\/wp-json\/wp\/v2\/posts\/133\/revisions"}],"predecessor-version":[{"id":147,"href":"https:\/\/helloblog.io\/da\/wp-json\/wp\/v2\/posts\/133\/revisions\/147"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/helloblog.io\/da\/wp-json\/wp\/v2\/media\/128"}],"wp:attachment":[{"href":"https:\/\/helloblog.io\/da\/wp-json\/wp\/v2\/media?parent=133"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/helloblog.io\/da\/wp-json\/wp\/v2\/categories?post=133"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/helloblog.io\/da\/wp-json\/wp\/v2\/tags?post=133"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}