{"id":144,"date":"2024-01-16T00:00:00","date_gmt":"2024-01-15T23:00:00","guid":{"rendered":"https:\/\/helloblog.io\/pt\/acorn-prettify-sucessor-soil-stack-roots\/"},"modified":"2026-01-20T06:32:53","modified_gmt":"2026-01-20T05:32:53","slug":"acorn-prettify-sucessor-soil-stack-roots","status":"publish","type":"post","link":"https:\/\/helloblog.io\/pt\/acorn-prettify-sucessor-soil-stack-roots\/","title":{"rendered":"Acorn Prettify: o sucessor do Soil e o que muda na stack Roots"},"content":{"rendered":"\n<p>A Roots anunciou o <strong>Acorn Prettify<\/strong>, um novo package que assume o papel de sucessor do <strong>Soil<\/strong> \u2014 aquele plugin cl\u00e1ssico que muita gente instalava quase por reflexo para deixar o WordPress mais \u201carrumado\u201d por dentro. A mudan\u00e7a n\u00e3o \u00e9 s\u00f3 de nome: ela acompanha a decis\u00e3o da Roots de apostar forte no <strong>Acorn<\/strong> (um framework\/app container para WordPress que aproxima o desenvolvimento do ecossistema Laravel, via Composer e comandos WP-CLI).<\/p>\n\n\n\n<p>Neste artigo, o foco \u00e9 entender <strong>o que o Acorn Prettify cobre<\/strong>, por que ele existe, e <strong>como migrar a partir do Soil<\/strong> num projeto que j\u00e1 usa Composer (e, frequentemente, Sage).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Contexto r\u00e1pido: de Roots Starter Theme ao Soil e agora ao Acorn Prettify<\/h2>\n\n\n\n<p>O Soil nasceu dentro do antigo starter theme da Roots, l\u00e1 no in\u00edcio da d\u00e9cada passada, e mais tarde foi separado como plugin independente quando saiu a vers\u00e3o 7 do Roots. Desde ent\u00e3o, ele virou um \u201cpacote utilit\u00e1rio\u201d comum em muitos projetos: instalas, ligas algumas features e segues a vida.<\/p>\n\n\n\n<p>O que muda agora \u00e9 a dire\u00e7\u00e3o estrat\u00e9gica: a Roots est\u00e1 a consolidar o ecossistema em torno do <strong>Acorn<\/strong> e dos seus packages. O <strong>Acorn Prettify<\/strong> entra exatamente aqui: ele re\u00fane e mant\u00e9m <strong>um conjunto espec\u00edfico das funcionalidades do Soil<\/strong> que a equipa pretende continuar a suportar no futuro.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">O que o Acorn Prettify traz (e o que deves esperar dele)<\/h2>\n\n\n\n<p>O Acorn Prettify inclui as <em>principais<\/em> features do Soil que v\u00e3o continuar em manuten\u00e7\u00e3o, segundo o an\u00fancio. Na pr\u00e1tica, isto traduz-se em tr\u00eas \u00e1reas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><strong>Limpeza do markup do WordPress<\/strong>: ajustes para produzir HTML mais \u201climpo\u201d\/consistente, reduzindo ru\u00eddo que o core tende a gerar em alguns pontos.<\/li>\n\n\n<li><strong>Pesquisa melhorada (Nice search)<\/strong>: uma abordagem para URLs de pesquisa mais amig\u00e1veis e previs\u00edveis.<\/li>\n\n\n<li><strong>Relative URLs<\/strong>: suporte para converter URLs absolutas em relativas \u2014 com um detalhe importante: <strong>vem desativado por defeito<\/strong>.<\/li>\n\n<\/ul>\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\">Aten\u00e7\u00e3o \u00e0s Relative URLs<\/h4>\n\n\n<p>Se tinhas Relative URLs ativas no Soil e dependes disso (por exemplo, em setups multi-ambiente ou behind proxies\/CDNs), valida o comportamento ap\u00f3s a migra\u00e7\u00e3o: no Acorn Prettify esta op\u00e7\u00e3o passa a estar <strong>desligada por defeito<\/strong>.<\/p>\n\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Migra\u00e7\u00e3o do Soil para o Acorn Prettify (via Composer)<\/h2>\n\n\n\n<p>A migra\u00e7\u00e3o \u00e9 direta se o teu projeto j\u00e1 gere depend\u00eancias com <strong>Composer<\/strong> (que \u00e9 o normal na stack Roots). O processo \u00e9: remover o Soil e instalar o novo package.<\/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 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<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\">Nota para projetos Sage: limpar <code>add_theme_support<\/code> antigo do Soil<\/h3>\n\n\n\n<p>Se est\u00e1s em Sage, pode haver configura\u00e7\u00f5es antigas do Soil registadas no tema via <code>add_theme_support<\/code> (tipicamente no <code>app\/setup.php<\/code>). Com o Acorn Prettify, a Roots indica que podes <strong>remover essas op\u00e7\u00f5es<\/strong> associadas ao Soil para evitar configura\u00e7\u00e3o duplicada\/confusa.<\/p>\n\n\n\n<p>H\u00e1 um exemplo concreto desta altera\u00e7\u00e3o num PR do reposit\u00f3rio do Sage (linkado na fonte), \u00fatil para comparar com a tua base de c\u00f3digo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Configura\u00e7\u00e3o: como ativar\/desativar features no Acorn Prettify<\/h2>\n\n\n\n<p>Ao contr\u00e1rio do modelo cl\u00e1ssico \u201cinstala plugin e liga no admin\u201d, aqui a abordagem \u00e9 mais pr\u00f3xima de um package moderno: as features s\u00e3o controladas por um ficheiro de configura\u00e7\u00e3o <strong><code>config\/prettify.php<\/code><\/strong>.<\/p>\n\n\n\n<p>Para alterares os defaults, a ideia \u00e9 <strong>publicar<\/strong> o config para o teu projeto e depois editar o que precisares.<\/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-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\">Porque isto \u00e9 relevante<\/h4>\n\n\n<p>Publicar config via <code>wp acorn<\/code> encaixa no workflow do Acorn: as op\u00e7\u00f5es ficam versionadas no projeto e tornam-se previs\u00edveis entre ambientes (local\/staging\/produ\u00e7\u00e3o), em vez de dependerem de toggles manuais.<\/p>\n\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">O que esta mudan\u00e7a sinaliza no ecossistema Roots<\/h2>\n\n\n\n<p>Mais do que substituir um plugin por outro, o Acorn Prettify \u00e9 um sinal claro de consolida\u00e7\u00e3o: a Roots est\u00e1 a empurrar as melhorias \u201cfundacionais\u201d do WordPress para dentro do <strong>ecossistema de packages do Acorn<\/strong>. Para equipas que j\u00e1 trabalham com Sage\/Acorn, isto tende a simplificar manuten\u00e7\u00e3o, atualiza\u00e7\u00e3o e consist\u00eancia de configura\u00e7\u00e3o.<\/p>\n\n\n\n<p>Se tens projetos legados com Soil, a migra\u00e7\u00e3o \u00e9 um bom momento para rever: quais features realmente usas, se Relative URLs ainda fazem sentido no teu stack atual, e como queres controlar essas decis\u00f5es via config.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Resumo<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li>O <strong>Acorn Prettify<\/strong> \u00e9 o sucessor do <strong>Soil<\/strong> e faz parte da aposta da Roots no <strong>Acorn<\/strong> e no seu ecossistema de packages.<\/li>\n\n\n<li>Inclui limpeza de markup, <strong>Nice search<\/strong> e suporte a <strong>Relative URLs<\/strong> (agora <strong>desligado por defeito<\/strong>).<\/li>\n\n\n<li>A migra\u00e7\u00e3o \u00e9 feita via Composer: <code>composer remove roots\/soil<\/code> e <code>composer require roots\/acorn-prettify<\/code>.<\/li>\n\n\n<li>A configura\u00e7\u00e3o \u00e9 centralizada em <code>config\/prettify.php<\/code> e pode ser publicada com <code>wp acorn vendor:publish --tag=prettify-config<\/code>.<\/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\/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\">Soil plugin<\/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><\/ul>\n            <\/div>","protected":false},"excerpt":{"rendered":"<p>Se usas Soil h\u00e1 anos para \u201climpar\u201d o WordPress, a Roots tem um novo caminho oficial: Acorn Prettify. V\u00ea o que ele traz, o que fica de fora e como migrar sem surpresas.<\/p>\n","protected":false},"author":27,"featured_media":143,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[22],"tags":[4,8,3,63,10],"class_list":["post-144","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ecossistema-wordpress","tag-acorn","tag-composer","tag-roots","tag-sage","tag-wordpress"],"_links":{"self":[{"href":"https:\/\/helloblog.io\/pt\/wp-json\/wp\/v2\/posts\/144","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\/27"}],"replies":[{"embeddable":true,"href":"https:\/\/helloblog.io\/pt\/wp-json\/wp\/v2\/comments?post=144"}],"version-history":[{"count":1,"href":"https:\/\/helloblog.io\/pt\/wp-json\/wp\/v2\/posts\/144\/revisions"}],"predecessor-version":[{"id":165,"href":"https:\/\/helloblog.io\/pt\/wp-json\/wp\/v2\/posts\/144\/revisions\/165"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/helloblog.io\/pt\/wp-json\/wp\/v2\/media\/143"}],"wp:attachment":[{"href":"https:\/\/helloblog.io\/pt\/wp-json\/wp\/v2\/media?parent=144"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/helloblog.io\/pt\/wp-json\/wp\/v2\/categories?post=144"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/helloblog.io\/pt\/wp-json\/wp\/v2\/tags?post=144"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}