{"id":119,"date":"2024-01-16T00:00:00","date_gmt":"2024-01-15T23:00:00","guid":{"rendered":"https:\/\/helloblog.io\/pl\/acorn-prettify-nastepca-soil-i-kolejny-krok-roots-w-strone-ekosystemu-acorn\/"},"modified":"2026-01-20T06:32:51","modified_gmt":"2026-01-20T05:32:51","slug":"acorn-prettify-nastepca-soil-i-kolejny-krok-roots-w-strone-ekosystemu-acorn","status":"publish","type":"post","link":"https:\/\/helloblog.io\/pl\/acorn-prettify-nastepca-soil-i-kolejny-krok-roots-w-strone-ekosystemu-acorn\/","title":{"rendered":"Acorn Prettify: nast\u0119pca Soil i kolejny krok Roots w stron\u0119 ekosystemu Acorn"},"content":{"rendered":"\n<p>W ekosystemie Roots dzieje si\u0119 kolejna istotna zmiana: pojawi\u0142 si\u0119 pakiet <strong><a href=\"https:\/\/github.com\/roots\/acorn-prettify\">Acorn Prettify<\/a><\/strong>, og\u0142oszony jako nast\u0119pca dobrze znanego <strong>Soil<\/strong> (plugin: <a href=\"https:\/\/github.com\/roots\/soil\">roots\/soil<\/a>). W praktyce oznacza to przeniesienie wybranych, utrzymywanych funkcji Soil do rozwi\u0105zania opartego o <strong>Acorn<\/strong> (czyli warstw\u0119 aplikacyjn\u0105 Roots, inspirowan\u0105 podej\u015bciem frameworkowym).<\/p>\n\n\n\n<p>Soil ma d\u0142ug\u0105 histori\u0119: by\u0142 cz\u0119\u015bci\u0105 startera Roots w latach 2011\u20132014, a wraz z wydaniem Roots v7 zosta\u0142 wydzielony do osobnego pluginu. Teraz Roots jasno komunikuje kierunek: pe\u0142na koncentracja na Acorn i rozw\u00f3j jego ekosystemu paczek (package ecosystem).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Co dok\u0142adnie wnosi Acorn Prettify (i co przejmuje z Soil)?<\/h2>\n\n\n\n<p>Acorn Prettify skupia si\u0119 na tych funkcjach Soil, kt\u00f3re Roots deklaruje dalej utrzymywa\u0107. Z perspektywy typowego projektu WordPress (zw\u0142aszcza opartego o Sage) s\u0105 to rzeczy, kt\u00f3re porz\u0105dkuj\u0105 codzienn\u0105 prac\u0119 i redukuj\u0105 liczb\u0119 \u201ema\u0142ych irytacji\u201d w markupie czy adresach URL.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Czyszczenie\/porz\u0105dkowanie markup\u00f3w WordPressa (cleaner WordPress markup) \u2013 mniej zb\u0119dnych element\u00f3w w HTML generowanym przez core.<\/li>\n\n\n<li>Lepsza wyszukiwarka (nice search) \u2013 usprawnienia zwi\u0105zane z zachowaniem wyszukiwania.<\/li>\n\n\n<li>Relative URLs (adresy wzgl\u0119dne) \u2013 w Acorn Prettify s\u0105 <strong>domy\u015blnie wy\u0142\u0105czone<\/strong>, co jest wa\u017cn\u0105 zmian\u0105 w oczekiwaniach wzgl\u0119dem zachowania projektu.<\/li>\n\n<\/ul>\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\">Uwaga o relative URLs<\/h4>\n\n\n<p>W Soil relatywne adresy bywa\u0142y u\u017cyteczne, ale potrafi\u0142y te\u017c zaskoczy\u0107 przy integracjach, cache\u2019owaniu, CDN-ach czy generowaniu link\u00f3w w kontekstach poza stron\u0105. Roots zaznacza, \u017ce w Acorn Prettify ta funkcja startuje jako wy\u0142\u0105czona domy\u015blnie.<\/p>\n\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Migracja z Soil do Acorn Prettify (Composer)<\/h2>\n\n\n\n<p>Je\u015bli masz Soil jako zale\u017cno\u015b\u0107 (cz\u0119sto spotykane w projektach opartych o Roots\/Sage), migracja sprowadza si\u0119 do przepi\u0119cia paczek w Composerze. Warto zrobi\u0107 to w jednej ga\u0142\u0119zi i szybko sprawdzi\u0107 rendering szablon\u00f3w, wyszukiwanie oraz linkowanie (szczeg\u00f3lnie je\u015bli wcze\u015bniej polega\u0142e\u015b na relative URLs).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1) Usu\u0144 Soil z zale\u017cno\u015bci<\/h3>\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 remove roots\/soil\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\"> remove<\/span><span style=\"color:#9ECBFF\"> roots\/soil<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">2) Dodaj Acorn Prettify<\/h3>\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 roots\/acorn-prettify\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\"> roots\/acorn-prettify<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">3) (Sage) Usu\u0144 stare add_theme_support dla Soil<\/h3>\n\n\n\n<p>W projektach Sage cz\u0119sto by\u0142y dodane wpisy <code>add_theme_support(...)<\/code> pod funkcje Soil. Po migracji mo\u017cna je usun\u0105\u0107 z pliku <code>app\/setup.php<\/code>, \u017ceby nie utrzymywa\u0107 martwej konfiguracji. Roots pokaza\u0142o to na przyk\u0142adzie w repo Sage: <a href=\"https:\/\/github.com\/roots\/sage\/pull\/3172\/files\">PR\/zmiany w Sage<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Konfiguracja: jak w\u0142\u0105cza\u0107 i dostosowywa\u0107 funkcje?<\/h2>\n\n\n\n<p>Funkcje Acorn Prettify s\u0105 kontrolowane przez plik konfiguracyjny <code>config\/prettify.php<\/code> (w repo paczki: <a href=\"https:\/\/github.com\/roots\/acorn-prettify\/blob\/main\/config\/prettify.php\">config\/prettify.php<\/a>). W praktyce oznacza to podej\u015bcie \u201ekonfiguracja jako kod\u201d: zamiast rozproszonych ustawie\u0144 w kilku miejscach, masz jedno \u017ar\u00f3d\u0142o prawdy.<\/p>\n\n\n\n<p>Je\u017celi chcesz zmieni\u0107 warto\u015bci domy\u015blne, publikujesz plik konfiguracyjny do projektu, a potem edytujesz go lokalnie:<\/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>wp acorn vendor:publish --tag=prettify-config\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\">wp<\/span><span style=\"color:#9ECBFF\"> acorn<\/span><span style=\"color:#9ECBFF\"> vendor:publish<\/span><span style=\"color:#79B8FF\"> --tag=prettify-config<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<div class=\"wp-block-group callout callout-success is-style-success 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\">Dlaczego to jest wygodne w zespo\u0142ach?<\/h4>\n\n\n<p>Konfig w repo (a nie \u201eklikane\u201d ustawienia) dobrze skaluje si\u0119 przy code review, CI i wdro\u017ceniach. Wida\u0107 jasno, kiedy i dlaczego zmieni\u0142o si\u0119 zachowanie markup\u00f3w czy link\u00f3w.<\/p>\n\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Co to oznacza dla projekt\u00f3w na Roots\/Sage?<\/h2>\n\n\n\n<p>Najwa\u017cniejszy sygna\u0142 jest strategiczny: Roots \u201edowozi\u201d kolejny element uk\u0142adanki pod Acorn, wzmacniaj\u0105c jego rol\u0119 jako podstawy dla nowoczesnego developmentu w WordPressie. Je\u017celi budujesz nowe projekty na Sage, to Acorn Prettify jest po prostu bardziej naturalnym wyborem ni\u017c trzymanie si\u0119 Soil z przyzwyczajenia.<\/p>\n\n\n\n<p>Z perspektywy utrzymania kodu najrozs\u0105dniej jest potraktowa\u0107 migracj\u0119 jako ma\u0142y refactor: przepi\u0105\u0107 zale\u017cno\u015bci, usun\u0105\u0107 stare <code>add_theme_support<\/code>, opublikowa\u0107 config tylko wtedy, gdy faktycznie potrzebujesz zmian, i zrobi\u0107 szybki smoke test: archiwa, single, wyszukiwanie oraz linkowanie.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Podsumowanie<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li>Acorn Prettify to oficjalny nast\u0119pca Soil, dostarczany jako paczka Composer.<\/li>\n\n\n<li>Zawiera utrzymywane funkcje: porz\u0105dkowanie markup\u00f3w, usprawnienia wyszukiwania i relative URLs (domy\u015blnie wy\u0142\u0105czone).<\/li>\n\n\n<li>Migracja jest prosta: <code>composer remove roots\/soil<\/code> i <code>composer require roots\/acorn-prettify<\/code>, a w Sage dodatkowo sprz\u0105tni\u0119cie <code>add_theme_support<\/code>.<\/li>\n\n\n<li>Konfiguracja odbywa si\u0119 przez <code>config\/prettify.php<\/code>, publikowany komend\u0105 <code>wp acorn vendor:publish --tag=prettify-config<\/code>.<\/li>\n\n<\/ol>\n\n\n\n<p>Je\u015bli potrzebujesz kontekstu lub chcesz prze\u015bledzi\u0107 decyzje projektowe, Roots prowadzi dyskusj\u0119 pod og\u0142oszeniem na Discourse: <a href=\"https:\/\/discourse.roots.io\/t\/-\/26545\">Discuss this post on Roots Discourse<\/a>.<\/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\/announcing-acorn-prettify\/\" target=\"_blank\" rel=\"noopener noreferrer\">Announcing Acorn Prettify<\/a><\/li><li><a href=\"https:\/\/github.com\/roots\/acorn-prettify\" target=\"_blank\" rel=\"noopener noreferrer\">roots\/acorn-prettify<\/a><\/li><li><a href=\"https:\/\/github.com\/roots\/soil\" target=\"_blank\" rel=\"noopener noreferrer\">roots\/soil<\/a><\/li><li><a href=\"https:\/\/roots.io\/creating-an-acorn-package\/\" target=\"_blank\" rel=\"noopener noreferrer\">Creating an Acorn Package<\/a><\/li><li><a href=\"https:\/\/github.com\/roots\/sage\/pull\/3172\/files\" target=\"_blank\" rel=\"noopener noreferrer\">Sage PR example (Soil removal)<\/a><\/li><li><a href=\"https:\/\/github.com\/roots\/acorn-prettify\/blob\/main\/config\/prettify.php\" target=\"_blank\" rel=\"noopener noreferrer\">config\/prettify.php (acorn-prettify)<\/a><\/li><li><a href=\"https:\/\/discourse.roots.io\/t\/-\/26545\" target=\"_blank\" rel=\"noopener noreferrer\">Discuss this post on Roots Discourse<\/a><\/li><\/ul>\n            <\/div>","protected":false},"excerpt":{"rendered":"<p>Roots wypu\u015bci\u0142o Acorn Prettify \u2014 nowy pakiet Composer, kt\u00f3ry przejmuje utrzymywane funkcje znane z Soil i przenosi je do \u015bwiata Acorn. Je\u015bli budujesz projekty na Sage\/Acorn, to jest to zmiana, kt\u00f3r\u0105 warto od razu pouk\u0142ada\u0107 w repo.<\/p>\n","protected":false},"author":24,"featured_media":118,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24],"tags":[4,7,3,74,10],"class_list":["post-119","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ekosystem-wordpress","tag-acorn","tag-composer","tag-roots","tag-sage","tag-wordpress"],"_links":{"self":[{"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/posts\/119","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\/24"}],"replies":[{"embeddable":true,"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/comments?post=119"}],"version-history":[{"count":1,"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/posts\/119\/revisions"}],"predecessor-version":[{"id":136,"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/posts\/119\/revisions\/136"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/media\/118"}],"wp:attachment":[{"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/media?parent=119"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/categories?post=119"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/tags?post=119"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}