{"id":123,"date":"2023-02-14T00:00:00","date_gmt":"2023-02-13T23:00:00","guid":{"rendered":"https:\/\/helloblog.io\/pl\/debugowanie-wordpressa-z-acorn-czytelne-bledy-zamiast-surowego-wp-debug\/"},"modified":"2026-01-20T06:32:51","modified_gmt":"2026-01-20T05:32:51","slug":"debugowanie-wordpressa-z-acorn-czytelne-bledy-zamiast-surowego-wp-debug","status":"publish","type":"post","link":"https:\/\/helloblog.io\/pl\/debugowanie-wordpressa-z-acorn-czytelne-bledy-zamiast-surowego-wp-debug\/","title":{"rendered":"Debugowanie WordPressa z Acorn: czytelne b\u0142\u0119dy zamiast surowego WP_DEBUG"},"content":{"rendered":"\n<p>W WordPressie debugowanie zwykle zaczyna si\u0119 i ko\u0144czy na sta\u0142ej <code>WP_DEBUG<\/code>. I s\u0142usznie \u2014 lokalnie to powinien by\u0107 absolutny standard, bo pozwala szybko wy\u0142apa\u0107 <em>notice<\/em>, <em>warning<\/em> i b\u0142\u0119dy, kt\u00f3re w innym przypadku potrafi\u0105 ukrywa\u0107 si\u0119 tygodniami. Problem w tym, \u017ce domy\u015blny output WordPressa jest\u2026 ma\u0142o przyjazny. W praktyce dostajesz zrzut komunikatu na ekran, cz\u0119sto bez kontekstu, bez \u0142adnego stack trace i bez sensownej prezentacji danych.<\/p>\n\n\n\n<p>Je\u015bli budujesz projekty na stacku Roots (np. Bedrock + Acorn), mo\u017cesz to znacz\u0105co poprawi\u0107. Acorn \u2014 czyli warstwa integruj\u0105ca spor\u0105 cz\u0119\u015b\u0107 ekosystemu Laravel z WordPressem \u2014 potrafi podmieni\u0107 obs\u0142ug\u0119 wyj\u0105tk\u00f3w i wy\u015bwietla\u0107 b\u0142\u0119dy w formie, do kt\u00f3rej przyzwyczai\u0142y nas nowoczesne frameworki PHP.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">WP_DEBUG w praktyce: co daje i dlaczego warto go mie\u0107 zawsze lokalnie<\/h2>\n\n\n\n<p><code>WP_DEBUG<\/code> to prze\u0142\u0105cznik trybu debug w WordPressie. Po jego w\u0142\u0105czeniu WordPress i PHP zaczynaj\u0105 raportowa\u0107 m.in. b\u0142\u0119dy, ostrze\u017cenia i notatki (notices), kt\u00f3re cz\u0119sto sygnalizuj\u0105 problemy jako\u015bciowe w kodzie: u\u017cycie nieistniej\u0105cej zmiennej, wywo\u0142anie przestarza\u0142ej funkcji, nieprawid\u0142owy typ argumentu itp.<\/p>\n\n\n\n<p>W projektach opartych o Bedrock (nowoczesny boilerplate WordPressa zarz\u0105dzany przez Composer) tryb debug w \u015brodowisku developerskim jest ju\u017c sensownie ustawiony domy\u015blnie \u2014 dzi\u0119ki osobnym plikom konfiguracyjnym per \u015brodowisko. To oszcz\u0119dza czas i ogranicza ryzyko, \u017ce kto\u015b \u201ezapomni\u201d o debugowaniu lokalnie.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Dlaczego domy\u015blny output WP_DEBUG bywa niewystarczaj\u0105cy<\/h2>\n\n\n\n<p>WordPress w najprostszym wariancie wy\u015bwietla komunikat bezpo\u015brednio na stronie. To lepsze ni\u017c cisza, ale przy realnych b\u0142\u0119dach (zw\u0142aszcza w z\u0142o\u017conych motywach i wtyczkach) szybko pojawiaj\u0105 si\u0119 typowe problemy:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>ma\u0142o czytelny stack trace albo jego brak (zale\u017cnie od kontekstu i konfiguracji PHP)<\/li>\n\n\n<li>trudno znale\u017a\u0107 \u017ar\u00f3d\u0142o b\u0142\u0119du w kodzie, gdy wyj\u0105tek wyp\u0142ywa g\u0142\u0119boko z hook\u00f3w WordPressa<\/li>\n\n\n<li>brak dodatkowego kontekstu w stylu \u201eco to za request\u201d, \u201ejakie by\u0142y dane wej\u015bciowe\u201d, \u201eco jest w zmiennych\u201d<\/li>\n\n<\/ul>\n\n\n\n<p>W efekcie debugowanie zamienia si\u0119 w r\u0119czne dorzucanie <code>error_log()<\/code>, <code>var_dump()<\/code> albo w bieganie z Xdebug \u2014 co jest OK, ale nie zawsze najszybsze na start.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Co zmienia Acorn: lepsza obs\u0142uga wyj\u0105tk\u00f3w przy WP_DEBUG<\/h2>\n\n\n\n<p>Acorn poprawia do\u015bwiadczenie debugowania, gdy masz aktywne <code>WP_DEBUG<\/code> oraz <code>WP_DEBUG_DISPLAY<\/code>. Innymi s\u0142owy: gdy WordPress ma debugowa\u0107 i ma prawo co\u015b wy\u015bwietli\u0107 w przegl\u0105darce, Acorn przejmuje obs\u0142ug\u0119 wyj\u0105tk\u00f3w i pokazuje je w czytelniejszej formie.<\/p>\n\n\n\n<p>Warto doprecyzowa\u0107 poj\u0119cia: <em>exception handler<\/em> (obs\u0142uga wyj\u0105tk\u00f3w) to komponent, kt\u00f3ry decyduje jak aplikacja reaguje na wyj\u0105tki \u2014 czy tylko je loguje, czy zwraca HTML, jaki pokazuje stack trace, jak formatuje dane itd. WordPress historycznie nie by\u0142 projektowany jako framework aplikacyjny, wi\u0119c jego domy\u015blna ergonomia w tym obszarze jest ograniczona.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Domy\u015blne strony b\u0142\u0119d\u00f3w w Acorn: handler Symfony<\/h3>\n\n\n\n<p>Domy\u015blnie Acorn wykorzystuje mechanizm obs\u0142ugi wyj\u0105tk\u00f3w z ekosystemu Symfony. W praktyce oznacza to bardziej uporz\u0105dkowan\u0105 stron\u0119 b\u0142\u0119du: czytelny komunikat, plik i linia, oraz stack trace, kt\u00f3ry da si\u0119 normalnie przejrze\u0107.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Ignition w WordPressie (Acorn v3): do\u015bwiadczenie jak w Laravelu<\/h3>\n\n\n\n<p>Je\u015bli pracujesz z Laravelem, Ignition prawdopodobnie kojarzysz jako domy\u015bln\u0105 stron\u0119 b\u0142\u0119du w Laravelu (od wersji 9). W Acorn v3 pojawi\u0142o si\u0119 wsparcie dla routingu w stylu Laravel, a razem z nim mo\u017cliwo\u015b\u0107 u\u017cywania Ignition tak\u017ce w projektach WordPressowych opartych o Acorn.<\/p>\n\n\n\n<p>To jest du\u017ca zmiana jako\u015bciowa, bo Ignition jest nastawiony na szybkie namierzanie problem\u00f3w: prezentuje wyj\u0105tek w bardzo czytelnej formie i u\u0142atwia nawigacj\u0119 po stack trace. Je\u015bli zale\u017cy Ci na mo\u017cliwie \u201eframeworkowym\u201d DX (developer experience) w WordPressie, to jest najrozs\u0105dniejsza opcja.<\/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\">Instalacja Ignition (dev dependency)<\/h4>\n\n\n<p>Ignition instalujesz przez Composer jako zale\u017cno\u015b\u0107 developersk\u0105, uruchamiaj\u0105c polecenie w katalogu, w kt\u00f3rym zainstalowany jest Acorn.<\/p>\n\n<\/div>\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\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>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Po instalacji, przy w\u0142\u0105czonym <code>WP_DEBUG<\/code> i <code>WP_DEBUG_DISPLAY<\/code>, b\u0142\u0119dy powinny zacz\u0105\u0107 renderowa\u0107 si\u0119 z u\u017cyciem Ignition (zgodnie z konfiguracj\u0105 Acorn). Szczeg\u00f3\u0142y konfiguracji i zachowania s\u0105 opisane w dokumentacji Roots w sekcji error handling.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Whoops: starsza, ale nadal u\u017cyteczna alternatywa<\/h3>\n\n\n\n<p>Przed Acorn v3 popularnym uzupe\u0142nieniem by\u0142 <code>whoops<\/code> (biblioteka PHP do \u0142adnych stron b\u0142\u0119d\u00f3w). Je\u015bli z jakiego\u015b powodu siedzisz jeszcze na Acorn v2, whoops nadal potrafi poprawi\u0107 czytelno\u015b\u0107 wyj\u0105tk\u00f3w wzgl\u0119dem bazowego outputu.<\/p>\n\n\n\n<p>W praktyce: je\u015bli masz mo\u017cliwo\u015b\u0107, sensowniejszy jest upgrade do Acorn v3 i wej\u015bcie w Ignition, ale whoops bywa dobrym krokiem po\u015brednim tam, gdzie modernizacja jest blokowana przez kompatybilno\u015b\u0107 projektu.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">A je\u015bli nie u\u017cywasz Acorn? Dwie wtyczki, kt\u00f3re robi\u0105 robot\u0119<\/h2>\n\n\n\n<p>Acorn nie jest jedyn\u0105 drog\u0105 do lepszego debugowania. Je\u015bli pracujesz na \u201eklasycznym\u201d WordPressie (bez Bedrock\/Acorn), s\u0105 wtyczki, kt\u00f3re \u015bwietnie uzupe\u0142niaj\u0105 codzienn\u0105 diagnostyk\u0119:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><a href=\"https:\/\/querymonitor.com\/\">Query Monitor<\/a> \u2014 absolutny must-have lokalnie: zapytania do bazy, hooki, HTTP requests, b\u0142\u0119dy PHP, cache i masa dodatkowych paneli diagnostycznych.<\/li>\n\n\n<li><a href=\"https:\/\/wordpress.org\/plugins\/debug-bar\/\">Debug Bar<\/a> \u2014 prostszy zestaw narz\u0119dzi, ale nadal przydatny, gdy chcesz szybki podgl\u0105d podstawowych informacji debug.<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Jak to pouk\u0142ada\u0107 w projekcie: sensowny baseline dla zespo\u0142u<\/h2>\n\n\n\n<p>Je\u015bli chcesz, \u017ceby debugowanie by\u0142o konsekwentne w ca\u0142ym zespole, dobrze dzia\u0142a takie podej\u015bcie:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li>Lokalnie zawsze w\u0142\u0105cz <code>WP_DEBUG<\/code> (w Bedrocku ustawienia per \u015brodowisko u\u0142atwiaj\u0105 temat).<\/li>\n\n\n<li>Trzymaj <code>WP_DEBUG_DISPLAY<\/code> w\u0142\u0105czone tylko tam, gdzie to ma sens (najcz\u0119\u015bciej lokalnie), \u017ceby b\u0142\u0119dy nie \u201ewycieka\u0142y\u201d na staging\/produkcj\u0119.<\/li>\n\n\n<li>Je\u015bli projekt stoi na Acorn v3: do\u0142\u00f3\u017c Ignition jako <code>--dev<\/code> i traktuj to jako standard DX.<\/li>\n\n\n<li>Niezale\u017cnie od Acorn: miej pod r\u0119k\u0105 Query Monitor do analizy wydajno\u015bci i problem\u00f3w z hookami\/zapytaniami.<\/li>\n\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Podsumowanie<\/h2>\n\n\n\n<p><code>WP_DEBUG<\/code> to fundament, ale w czystym WordPressie jego output jest daleki od idea\u0142u. Acorn poprawia ten obszar, przejmuj\u0105c obs\u0142ug\u0119 wyj\u0105tk\u00f3w i podaj\u0105c b\u0142\u0119dy w formie znanej z nowoczesnych aplikacji PHP. W Acorn v3 szczeg\u00f3lnie warto zwr\u00f3ci\u0107 uwag\u0119 na Ignition \u2014 to jedna z tych zmian, kt\u00f3re realnie skracaj\u0105 czas od \u201emamy b\u0142\u0105d\u201d do \u201ewiem dok\u0142adnie gdzie i dlaczego\u201d.<\/p>\n\n\n<div class=\"references-section\">\n                <h2>Odniesienia \/ \u0179r\u00f3d\u0142a<\/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><\/ul>\n            <\/div>","protected":false},"excerpt":{"rendered":"<p>Masz w\u0142\u0105czone `WP_DEBUG`, a mimo to diagnoza b\u0142\u0119d\u00f3w w WordPressie dalej boli? Acorn potrafi zamieni\u0107 surowe komunikaty PHP w czytelne strony wyj\u0105tk\u00f3w (Symfony\/Ignition), kt\u00f3re realnie przyspieszaj\u0105 prac\u0119 lokalnie.<\/p>\n","protected":false},"author":25,"featured_media":122,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24],"tags":[4,73,7,79,10],"class_list":["post-123","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ekosystem-wordpress","tag-acorn","tag-bedrock","tag-composer","tag-debugowanie","tag-wordpress"],"_links":{"self":[{"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/posts\/123","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/users\/25"}],"replies":[{"embeddable":true,"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/comments?post=123"}],"version-history":[{"count":1,"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/posts\/123\/revisions"}],"predecessor-version":[{"id":137,"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/posts\/123\/revisions\/137"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/media\/122"}],"wp:attachment":[{"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/media?parent=123"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/categories?post=123"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/tags?post=123"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}