{"id":142,"date":"2023-02-14T00:00:00","date_gmt":"2023-02-13T23:00:00","guid":{"rendered":"https:\/\/helloblog.io\/sl\/wordpress-debugiranje-z-acorn-wp-debug\/"},"modified":"2026-01-20T06:33:07","modified_gmt":"2026-01-20T05:33:07","slug":"wordpress-debugiranje-z-acorn-wp-debug","status":"publish","type":"post","link":"https:\/\/helloblog.io\/sl\/wordpress-debugiranje-z-acorn-wp-debug\/","title":{"rendered":"WordPress debugiranje brez trpljenja: kako ti Acorn polep\u0161a WP_DEBUG"},"content":{"rendered":"\n<p>\u010ce razvija\u0161 WordPress teme ali vti\u010dnike, je <code>WP_DEBUG<\/code> prakti\u010dno osnovna higiena. Problem je, da WordPress privzeto napake in notice-e pogosto \u201czabije\u201d kar na ekran v obliki surovega izpisa, ki je sicer bolj\u0161i kot ni\u010d, a dale\u010d od izku\u0161nje, ki smo je vajeni v modernih PHP ogrodjih. V praksi to pomeni ve\u010d \u010dasa za brskanje po stack traceu in manj \u010dasa za dejansko re\u0161evanje problema.<\/p>\n\n\n\n<p>V tem \u010dlanku poka\u017eem, kaj se v debugiranju spremeni, ko ima\u0161 v projektu Roots Acorn (Laravelov ekosistem znotraj WordPressa), in katere alternative ima\u0161, \u010de Acorna ne uporablja\u0161.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">WP_DEBUG: obvezno v lokalnem razvoju (in zakaj je privzeti izpis te\u010den)<\/h2>\n\n\n\n<p><code>WP_DEBUG<\/code> je WordPressov debug na\u010din, ki ga vklopi\u0161 z nastavitvijo konstante <code>WP_DEBUG<\/code> v konfiguraciji. V lokalnih okoljih bi moral biti vedno vklju\u010den, ker te hitro opozori na notice-e, deprecated klice, warninge in exceptione, ki jih sicer spregleda\u0161 \u2014 dokler ne eksplodirajo na produkciji.<\/p>\n\n\n\n<p>Te\u017eava je v tem, da je privzeti output pogosto samo blok besedila na strani. Videti je surovo, brez konteksta in brez ergonomije, ki bi ti pomagala v par sekundah priti do prave vrstice kode.<\/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\/17\/2026\/01\/wp_debug-default-scaled.png\" alt=\"Privzeti izpis WP_DEBUG, kjer WordPress napake in notice-e izpi\u0161e neposredno na stran\" class=\"wp-image-138\" srcset=\"https:\/\/helloblog.io\/app\/uploads\/sites\/17\/2026\/01\/wp_debug-default-scaled.png 2560w, https:\/\/helloblog.io\/app\/uploads\/sites\/17\/2026\/01\/wp_debug-default-300x264.png 300w, https:\/\/helloblog.io\/app\/uploads\/sites\/17\/2026\/01\/wp_debug-default-1024x901.png 1024w, https:\/\/helloblog.io\/app\/uploads\/sites\/17\/2026\/01\/wp_debug-default-768x676.png 768w, https:\/\/helloblog.io\/app\/uploads\/sites\/17\/2026\/01\/wp_debug-default-1536x1351.png 1536w, https:\/\/helloblog.io\/app\/uploads\/sites\/17\/2026\/01\/wp_debug-default-2048x1802.png 2048w, https:\/\/helloblog.io\/app\/uploads\/sites\/17\/2026\/01\/wp_debug-default-400x352.png 400w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><figcaption class=\"wp-element-caption\">Privzeti WP_DEBUG output je funkcionalen, a za resno delo neroden. \u2014 <em>Forr\u00e1s: Roots.io<\/em><\/figcaption><\/figure>\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\">Bedrock opomba<\/h4>\n\n\n<p>\u010ce uporablja\u0161 Bedrock (moderni WordPress boilerplate s Composerjem), je v razvojnih okoljih <code>WP_DEBUG<\/code> tipi\u010dno \u017ee omogo\u010den. To je tudi eden od razlogov, zakaj je Bedrock dobra osnova za projekte, kjer \u017eeli\u0161 bolj \u201cframework\u201d ob\u010dutek.<\/p>\n\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Kaj Acorn naredi druga\u010de pri WP_DEBUG<\/h2>\n\n\n\n<p>Roots Acorn je plast, ki v WordPress projekt pripelje velik del Laravel izku\u0161nje (container, service providerji, helperji, routing ipd.). Ena zelo prakti\u010dna posledica: ko sta omogo\u010dena <code>WP_DEBUG<\/code> in <code>WP_DEBUG_DISPLAY<\/code>, Acorn zamenja privzeto izpisovanje napak z bolj razumnim exception handlerjem.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1) Privzeto v Acornu: Symfony exception handler<\/h3>\n\n\n\n<p>Out of the box Acorn uporabi Symfonyjev exception handler. V praksi to pomeni bistveno bolj berljiv prikaz exceptionov in stack tracea, z jasnej\u0161im fokusom na to, kje je problem nastal.<\/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\/17\/2026\/01\/wp_debug-acorn-symfony-scaled.png\" alt=\"Acornov privzeti WP_DEBUG izpis s Symfony exception handlerjem\" class=\"wp-image-139\" srcset=\"https:\/\/helloblog.io\/app\/uploads\/sites\/17\/2026\/01\/wp_debug-acorn-symfony-scaled.png 2560w, https:\/\/helloblog.io\/app\/uploads\/sites\/17\/2026\/01\/wp_debug-acorn-symfony-300x264.png 300w, https:\/\/helloblog.io\/app\/uploads\/sites\/17\/2026\/01\/wp_debug-acorn-symfony-1024x901.png 1024w, https:\/\/helloblog.io\/app\/uploads\/sites\/17\/2026\/01\/wp_debug-acorn-symfony-768x676.png 768w, https:\/\/helloblog.io\/app\/uploads\/sites\/17\/2026\/01\/wp_debug-acorn-symfony-1536x1351.png 1536w, https:\/\/helloblog.io\/app\/uploads\/sites\/17\/2026\/01\/wp_debug-acorn-symfony-2048x1802.png 2048w, https:\/\/helloblog.io\/app\/uploads\/sites\/17\/2026\/01\/wp_debug-acorn-symfony-400x352.png 400w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><figcaption class=\"wp-element-caption\">Acorn privzeto uporabi Symfony handler in s tem izbolj\u0161a berljivost napak. \u2014 <em>Forr\u00e1s: Roots.io<\/em><\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">2) Najbolj\u0161a izku\u0161nja: Ignition (Laravel-style error page)<\/h3>\n\n\n\n<p>\u010ce prihaja\u0161 iz Laravel sveta, ti je Ignition verjetno doma\u010d: to je error page, ki je v Laravelu privzeta od v9 dalje. Z Acorn v3 (po navedbah projekta) je dodana podpora za Laravel routing, kar odpre vrata tudi Ignitionu v WordPress projektih, ki uporabljajo Acorn.<\/p>\n\n\n\n<p>Rezultat je zelo \u201cframework\u201d izku\u0161nja: pregledna napaka, uporaben stack trace in bistveno manj ugibanja, kaj se je zgodilo.<\/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\/17\/2026\/01\/wp_debug-acorn-ignition-scaled.png\" alt=\"Acorn WP_DEBUG izpis z Ignitionom, podobno kot v Laravelu\" class=\"wp-image-140\" srcset=\"https:\/\/helloblog.io\/app\/uploads\/sites\/17\/2026\/01\/wp_debug-acorn-ignition-scaled.png 2560w, https:\/\/helloblog.io\/app\/uploads\/sites\/17\/2026\/01\/wp_debug-acorn-ignition-300x264.png 300w, https:\/\/helloblog.io\/app\/uploads\/sites\/17\/2026\/01\/wp_debug-acorn-ignition-1024x901.png 1024w, https:\/\/helloblog.io\/app\/uploads\/sites\/17\/2026\/01\/wp_debug-acorn-ignition-768x676.png 768w, https:\/\/helloblog.io\/app\/uploads\/sites\/17\/2026\/01\/wp_debug-acorn-ignition-1536x1351.png 1536w, https:\/\/helloblog.io\/app\/uploads\/sites\/17\/2026\/01\/wp_debug-acorn-ignition-2048x1802.png 2048w, https:\/\/helloblog.io\/app\/uploads\/sites\/17\/2026\/01\/wp_debug-acorn-ignition-400x352.png 400w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><figcaption class=\"wp-element-caption\">Ignition na WordPressu (prek Acorna) je eden najbolj\u0161ih na\u010dinov za hitro razhro\u0161\u010devanje. \u2014 <em>Forr\u00e1s: Roots.io<\/em><\/figcaption><\/figure>\n\n\n\n<p>Namestitev Ignitiona je preprosta, ker gre za Composer paket. Za razvojno odvisnost ga doda\u0161 v isti direktorij, kjer je name\u0161\u010den 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\">Ne pozabi na kontekst<\/h4>\n\n\n<p>Ignition je smiselno name\u0161\u010dati kot <code>--dev<\/code> odvisnost. Namenjen je razvojnemu okolju, kjer je <code>WP_DEBUG<\/code> vklopljen, ne produkciji.<\/p>\n\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\">3) Starej\u0161i pristop (Acorn v2): whoops<\/h3>\n\n\n\n<p>Pred Acorn v3 je bil pogosto priporo\u010den whoops (priljubljen PHP error handler). \u010ce si \u0161e na Acorn v2, lahko z whoops \u0161e vedno dobi\u0161 bolj prijazen prikaz napak kot s privzetim WordPress outputom. Vseeno je po priporo\u010dilih projekta bolj smiselno nadgraditi na Acorn v3, kjer je Ignition podprt bolj nativno.<\/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\/17\/2026\/01\/wp_debug-acorn-whoops-scaled.png\" alt=\"Acorn WP_DEBUG izpis z whoops handlerjem\" class=\"wp-image-141\" srcset=\"https:\/\/helloblog.io\/app\/uploads\/sites\/17\/2026\/01\/wp_debug-acorn-whoops-scaled.png 2560w, https:\/\/helloblog.io\/app\/uploads\/sites\/17\/2026\/01\/wp_debug-acorn-whoops-300x264.png 300w, https:\/\/helloblog.io\/app\/uploads\/sites\/17\/2026\/01\/wp_debug-acorn-whoops-1024x901.png 1024w, https:\/\/helloblog.io\/app\/uploads\/sites\/17\/2026\/01\/wp_debug-acorn-whoops-768x676.png 768w, https:\/\/helloblog.io\/app\/uploads\/sites\/17\/2026\/01\/wp_debug-acorn-whoops-1536x1351.png 1536w, https:\/\/helloblog.io\/app\/uploads\/sites\/17\/2026\/01\/wp_debug-acorn-whoops-2048x1802.png 2048w, https:\/\/helloblog.io\/app\/uploads\/sites\/17\/2026\/01\/wp_debug-acorn-whoops-400x352.png 400w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><figcaption class=\"wp-element-caption\">whoops je bil dolgo \u010dasa \u201cgo-to\u201d za lep\u0161i stack trace v PHP aplikacijah. \u2014 <em>Forr\u00e1s: Roots.io<\/em><\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\u010ce Acorna nima\u0161: dve vti\u010dni\u0161ki klasiki za bolj\u0161i debugging<\/h2>\n\n\n\n<p>Ni vsak WordPress projekt postavljen na Bedrock + Acorn (\u010deprav je to zelo udobna kombinacija, sploh \u010de ti je v\u0161e\u010d bolj moderna PHP struktura in Laravel helperji). \u010ce dela\u0161 na bolj klasi\u010dnem WordPress setupu, lahko \u0161e vedno bistveno izbolj\u0161a\u0161 debugging s preverjenimi vti\u010dniki.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><strong>Query Monitor<\/strong> \u2013 prakti\u010dno obvezna oprema za lokalno okolje: pomaga pri vpogledih v queryje, hooks, HTTP klice, napake in \u0161e marsikaj.<\/li>\n\n\n<li><strong>Debug Bar<\/strong> \u2013 la\u017eja alternativa, ki doda debug panel v admin toolbar in olaj\u0161a osnovno diagnostiko.<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Prakti\u010den zaklju\u010dek: kaj se spla\u010da nastaviti<\/h2>\n\n\n\n<p>Za hitrej\u0161e re\u0161evanje napak v WordPressu sta klju\u010dni dve stvari: <code>WP_DEBUG<\/code> mora biti v lokalnem razvoju vedno vklopljen, izpis napak pa mora biti dovolj dober, da ti ne krade \u010dasa. Acorn tu naredi veliko razliko \u017ee s privzetim Symfony handlerjem, \u0161e bolj pa z Ignitionom, ki WordPress debug izku\u0161njo pribli\u017ea Laravelu.<\/p>\n\n\n\n<p>\u010ce Acorna ne uporablja\u0161, je najmanj, kar se spla\u010da narediti, namestitev Query Monitorja, ker ti da zelo konkreten vpogled v to, kaj se dogaja v runtime-u. Pri kompleksnej\u0161ih projektih je to pogosto razlika med \u201cbrskanjem na slepo\u201d in sistemati\u010dnim debugiranjem.<\/p>\n\n\n<div class=\"references-section\">\n                <h2>Reference \/ Viri<\/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:\/\/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 je nujen, a privzeti izpis napak v WordPressu je pogosto neberljiv in neprijazen. Acorn ga lahko v razvojnih okoljih spremeni v res uporaben \u201cdeveloper experience\u201d \u2013 od Symfony handlerja do Laravel Ignition.<\/p>\n","protected":false},"author":47,"featured_media":137,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17],"tags":[4,70,77,10,76],"class_list":["post-142","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ekosistem-wordpress","tag-acorn","tag-bedrock","tag-debugging","tag-wordpress","tag-wp_debug"],"_links":{"self":[{"href":"https:\/\/helloblog.io\/sl\/wp-json\/wp\/v2\/posts\/142","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/helloblog.io\/sl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/helloblog.io\/sl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/helloblog.io\/sl\/wp-json\/wp\/v2\/users\/47"}],"replies":[{"embeddable":true,"href":"https:\/\/helloblog.io\/sl\/wp-json\/wp\/v2\/comments?post=142"}],"version-history":[{"count":1,"href":"https:\/\/helloblog.io\/sl\/wp-json\/wp\/v2\/posts\/142\/revisions"}],"predecessor-version":[{"id":156,"href":"https:\/\/helloblog.io\/sl\/wp-json\/wp\/v2\/posts\/142\/revisions\/156"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/helloblog.io\/sl\/wp-json\/wp\/v2\/media\/137"}],"wp:attachment":[{"href":"https:\/\/helloblog.io\/sl\/wp-json\/wp\/v2\/media?parent=142"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/helloblog.io\/sl\/wp-json\/wp\/v2\/categories?post=142"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/helloblog.io\/sl\/wp-json\/wp\/v2\/tags?post=142"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}