{"id":230044,"date":"2022-11-17T11:27:00","date_gmt":"2022-11-17T08:27:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230044"},"modified":"2022-11-09T19:50:49","modified_gmt":"2022-11-09T16:50:49","slug":"modelos-wordpress-para-iniciantes-madeira","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/modelos-wordpress-para-iniciantes-madeira\/","title":{"rendered":"Modelos WordPress para Iniciantes: Madeira"},"content":{"rendered":"\n<p>Desde que falei sobre templates do WordPress, abordei alguns mecanismos diferentes dispon\u00edveis:<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/viniwrubleski\/jade-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Jade-PHP<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/cjonasw\/wordpress-starter-theme-mustache\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Bigode<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/zach-adams\/sprig-foundation\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Raminho<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/jenssegers\/blade\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">L\u00e2mina<\/a><\/li>\n<\/ul>\n<p>Se voc\u00ea est\u00e1 olhando para o Mustache, ent\u00e3o voc\u00ea pode estar interessado em Handlebars, e se voc\u00ea est\u00e1 olhando para o Blade, ent\u00e3o eu recomendo verificar o <a href=\"https:\/\/roots.io\/sage\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Sage<\/a> da equipe <a href=\"https:\/\/roots.io\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Roots<\/a>.<\/p>\n<p>Mas para este post final, vou continuar com o Timber que foi o que apresentei ontem. Eu n\u00e3o sou muito sobre o que est\u00e1 sendo usado (j\u00e1 que todos eles t\u00eam suas vantagens), desde que seja consistente.<\/p>\n<h2>Modelagem do WordPress: usando madeira<\/h2>\n<p>Com isso dito, veja como voc\u00ea pode come\u00e7ar a usar o <a href=\"https:\/\/www.upstatement.com\/timber\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Timber<\/a> em seus projetos.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-165381-61e77ec006741.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-165381-61e77ec006741.png\" alt=\"Modelos WordPress para Iniciantes: Madeira\" ><\/a><\/p>\n<p>Para come\u00e7ar, voc\u00ea precisar\u00e1 estar familiarizado com o Composer e precisar\u00e1 ter uma configura\u00e7\u00e3o de ambiente de desenvolvimento local. Se voc\u00ea n\u00e3o tem nenhum desses ou precisa de ajuda, ent\u00e3o eu tenho o que voc\u00ea precisa:<\/p>\n<ol>\n<li><a href=\"https:\/\/tommcfarlin.com\/laravel-valet-for-wordpress\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Usando Laravel para desenvolvimento WordPress<\/a><\/li>\n<li><a href=\"https:\/\/tommcfarlin.com\/tag\/configuring-composer-for-wordpress\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Configurando o Composer para WordPress<\/a><\/li>\n<\/ol>\n<p>Depois de percorrer as etapas em cada um desses guias, voc\u00ea deve estar pronto para ir. Ent\u00e3o aqui est\u00e1 o que vamos fazer.<\/p>\n<h3>1 Configure uma instala\u00e7\u00e3o local para madeira<\/h3>\n<p>Vou usar o Valet para isso, o que significa que terei um diret\u00f3rio com a vers\u00e3o mais recente do <a href=\"https:\/\/wordpress.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WordPress<\/a> (que \u00e9 4.8.3) instalada em seu diret\u00f3rio.<\/p>\n<p>Isso significa que terei um banco de dados j\u00e1 pronto:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-165381-61e77ec4380aa.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-165381-61e77ec4380aa.png\" alt=\"Modelos WordPress para Iniciantes: Madeira\" ><\/a><\/p>\n<p>E vou emitir os seguintes comandos para configurar o Laravel e uma instala\u00e7\u00e3o segura (para imitar um ambiente de teste):<\/p>\n<pre><code>$ valet link\n$ valet secure<\/code><\/pre>\n<p>Para que eu possa acessar o site em um navegador.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-165381-61e77ec7806b6.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-165381-61e77ec7806b6.png\" alt=\"Modelos WordPress para Iniciantes: Madeira\" ><\/a><\/p>\n<p>Para quem tem curiosidade, estou usando:<\/p>\n<ul>\n<li><a href=\"https:\/\/wordpress.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WordPress<\/a> 4.8.3<\/li>\n<li><a href=\"https:\/\/wordpress.org\/themes\/twentyfifteen\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">vinte e quinze<\/a><\/li>\n<li>Limpar permalinks<\/li>\n<\/ul>\n<p>E nenhum outro plugin. \u00c9 apenas uma instala\u00e7\u00e3o de baunilha diferente do que voc\u00ea v\u00ea acima.<\/p>\n<p>Neste ponto, estou pronto para instalar o Timber.<\/p>\n<h3>2 Instalando Madeira<\/h3>\n<p>Supondo que voc\u00ea seguiu os guias acima para Valet e Composer, voc\u00ea deve estar pronto para ir. Ent\u00e3o, usando um terminal, navegue at\u00e9 o diret\u00f3rio de instala\u00e7\u00e3o do WordPress.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-165381-61e77ecb7040b.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-165381-61e77ecb7040b.png\" alt=\"Modelos WordPress para Iniciantes: Madeira\" ><\/a><\/p>\n<p>Em seguida, emita o seguinte comando:<\/p>\n<pre><code>$ composer require timber\/timber<\/code><\/pre>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-165381-61e77ece8223b.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-165381-61e77ece8223b.png\" alt=\"Modelos WordPress para Iniciantes: Madeira\" ><\/a><\/p>\n<p>Isso instalar\u00e1 o Timber, mas voc\u00ea ainda precisar\u00e1 atualizar o arquivo functions.php do seu tema para que ele use corretamente o autoloader do Composer.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-165381-61e77ed28264d.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-165381-61e77ed28264d.png\" alt=\"Modelos WordPress para Iniciantes: Madeira\" ><\/a><\/p>\n<p>Supondo que tudo tenha corrido corretamente, voc\u00ea poder\u00e1 atualizar seu site, navegar para quaisquer postagens, p\u00e1ginas e assim por diante e nada deve estar fora de ordem.<\/p>\n<h3>3 Inicializando Madeira<\/h3>\n<p>Finalmente, \u00e9 hora de usar o Timber para substituir muito do que estamos acostumados a ver no contexto de um template WordPress.<\/p>\n<p>Estou optando por fazer isso dentro <strong>do content-page.php<\/strong> para facilitar o acompanhamento. Observe que o segmento de c\u00f3digo que estou alterando originalmente <a href=\"https:\/\/gist.github.com\/tommcfarlin\/2c02b22272f645076f7f735bd61a4034#file-04-content-page-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">se parece com isso:<\/a><\/p>\n<pre><code>&lt;article id=\"post-&lt;?php the_ID(); ?&gt;\" &lt;?php post_class(); ?&gt;&gt;\n    &lt;?php\n        \/\/ Post thumbnail.\n        twentyfifteen_post_thumbnail();\n    ?&gt;\n\n    &lt;header class=\"entry-header\"&gt;\n        &lt;?php the_title( '&lt;h1 class=\"entry-title\"&gt;', '&lt;\/h1&gt;' ); ?&gt;\n    &lt;\/header&gt;&lt;!-- .entry-header --&gt;\n\n    &lt;div class=\"entry-content\"&gt;\n        &lt;?php the_content(); ?&gt;\n        &lt;?php\n            wp_link_pages( array(\n                'before'      =&gt; '&lt;div class=\"page-links\"&gt;&lt;span class=\"page-links-title\"&gt;'. __( 'Pages:', 'twentyfifteen' ). '&lt;\/span&gt;',\n                'after'       =&gt; '&lt;\/div&gt;',\n                'link_before' =&gt; '&lt;span&gt;',\n                'link_after'  =&gt; '&lt;\/span&gt;',\n                'pagelink'    =&gt; '&lt;span class=\"screen-reader-text\"&gt;'. __( 'Page', 'twentyfifteen' ). ' &lt;\/span&gt;%',\n                'separator'   =&gt; '&lt;span class=\"screen-reader-text\"&gt;, &lt;\/span&gt;',) );\n        ?&gt;\n    &lt;\/div&gt;&lt;!-- .entry-content --&gt;\n\n    &lt;?php edit_post_link( __( 'Edit', 'twentyfifteen' ), '&lt;footer class=\"entry-footer\"&gt;&lt;span class=\"edit-link\"&gt;', '&lt;\/span&gt;&lt;\/footer&gt;&lt;!-- .entry-footer --&gt;' ); ?&gt;\n\n&lt;\/article&gt;&lt;!-- #post-## --&gt;<\/code><\/pre>\n<p>Neste post, n\u00e3o vou recriar completamente o que voc\u00ea v\u00ea acima, mas vou come\u00e7ar com o que \u00e9 necess\u00e1rio para come\u00e7ar a usar um mecanismo de modelagem dentro do contexto de uma base PHP.<\/p>\n<p>Primeiro, voc\u00ea precisar\u00e1 criar um modelo que possa ser aplicado \u00e0 p\u00e1gina de amostra em uma instala\u00e7\u00e3o padr\u00e3o do WordPress. Eu chamei o meu <a href=\"https:\/\/gist.github.com\/tommcfarlin\/2c02b22272f645076f7f735bd61a4034#file-05-template-timber-page-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">template-timber-page.php<\/a> e ficou assim:<\/p>\n<pre><code>&lt;?php\n\n\/**\n * Template Name: Timber Template\n * Description: Replaces the standard page with a Timber template.\n *\/\n\n$timber  = new TimberTimber();\n$context = Timber::get_context();\n$post    = new TimberPost();\n\n$context['post'] = $post;\nTimber::render(\n  array( 'content-'. $post-&gt;post_name. '.twig', 'page.twig' ),\n  $context\n);\n<\/code><\/pre>\n<p>No c\u00f3digo acima, veja o que est\u00e1 acontecendo:<\/p>\n<ol>\n<li>\u00a0Estou instanciando o objeto Timber.<\/li>\n<li>Ent\u00e3o, estou recebendo um contexto Timber. O contexto cont\u00e9m muitas informa\u00e7\u00f5es \u00fateis no modelo (ou no site), dependendo de onde voc\u00ea est\u00e1 usando o modelo.<\/li>\n<li>Depois disso, estou pegando um TimberPost que \u00e9 essencialmente uma extens\u00e3o de um post do WordPress. Ele tem os dados do WP_Post mas disponibiliza para nossos templates.<\/li>\n<li>Em seguida, defino o \u00edndice de <strong>postagem do array<\/strong> <strong>$context<\/strong> com uma refer\u00eancia ao Timber Post (que chamei de <strong>$post<\/strong> ).<\/li>\n<li>Por fim, digo ao Timber para renderizar uma p\u00e1gina chamada <strong>content-sample-page.twig<\/strong> usando o contexto fornecido.<\/li>\n<\/ol>\n<p>\u00c9 aqui que \u00e9 importante criar o arquivo twig real (que \u00e9 a extens\u00e3o do arquivo de modelo Timber). Ent\u00e3o eu criei <strong>content-sample-page.twig<\/strong> e ficou <a href=\"https:\/\/gist.github.com\/tommcfarlin\/2c02b22272f645076f7f735bd61a4034#file-06-cotent-sample-page-twig\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">assim:<\/a><\/p>\n<pre><code>{% block content %}\n  &lt;article id=\"post-{{post.ID}}\" class=\"{{body_class}}\"&gt;\n\n    &lt;header class=\"entry-header\"&gt;\n      &lt;h1 class=\"article-h1\"&gt;{{post.title}}&lt;\/h1&gt;\n    &lt;\/header&gt;&lt;!-- .entry-header --&gt;\n\n    &lt;div class=\"entry-content\"&gt;\n        {{post.content}}\n    &lt;\/div&gt;&lt;!-- .entry-content --&gt;\n\n  &lt;\/article&gt;&lt;!-- #post-## --&gt;\n{% endblock %}\n<\/code><\/pre>\n<p>Depois de instanciar o objeto Timber e substituir o c\u00f3digo que voc\u00ea v\u00ea acima, voc\u00ea notar\u00e1 que o c\u00f3digo l\u00ea um pouco diferente (embora n\u00e3o seja totalmente dif\u00edcil de seguir).<\/p>\n<h3>4 Aplicando o Modelo<\/h3>\n<p>Para aplicar o modelo, navegue at\u00e9 <strong>P\u00e1ginas<\/strong> no WordPress. Localize a <strong>p\u00e1gina de amostra<\/strong> e, no menu suspenso do modelo, escolha a que acabamos de criar usando o t\u00edtulo acima:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-165381-61e77ed87f4dc.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-165381-61e77ed87f4dc.png\" alt=\"Modelos WordPress para Iniciantes: Madeira\" ><\/a><\/p>\n<p>Feito isso, voc\u00ea pode visualizar a postagem. Voc\u00ea notar\u00e1 que parece um pouco nu em compara\u00e7\u00e3o com o que estamos acostumados a ver:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-165381-61e77eddccec8.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-165381-61e77eddccec8.png\" alt=\"Modelos WordPress para Iniciantes: Madeira\" ><\/a><\/p>\n<p>Mas voc\u00ea tem uma ideia geral de como podemos usar o contexto para acessar muitas das mesmas propriedades que estamos acostumados a ver no WordPress sem ter que encher o c\u00f3digo com marca\u00e7\u00e3o e PHP e qualquer outra coisa que estejamos usando para usar.<\/p>\n<h2>Mais recursos<\/h2>\n<p>Eu sei que este \u00e9 predominantemente um curso intensivo de modelagem e n\u00e3o cobre tanto quanto poderia. Como este post se aproxima de 1000 palavras, preciso tra\u00e7ar a linha em algum lugar, ent\u00e3o estou optando por faz\u00ea-lo aqui.<\/p>\n<p>Isso n\u00e3o significa que eu terminei de discutir isso, no entanto. Pretendo voltar a t\u00f3picos mais avan\u00e7ados sobre modelagem em potes futuros.<\/p>\n<p>Mas se voc\u00ea estiver interessado, recomendo seguir o guia <a href=\"https:\/\/timber.github.io\/docs\/getting-started\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Getting tarted<\/a> for Timber e o projeto no <a href=\"https:\/\/github.com\/timber\/timber\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">GitHub<\/a>.<\/p>\n<p>Isso pelo menos lhe dar\u00e1 um ponto de partida a partir do qual voc\u00ea pode progredir ainda mais em seus esfor\u00e7os para criar um c\u00f3digo mais limpo e logicamente separado do que estamos acostumados a ver no WordPress.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Usar um mecanismo como o Timber pode ajudar a melhorar a separa\u00e7\u00e3o de interesses nos modelos do WordPress. Aqui est\u00e1 um exemplo de como come\u00e7ar.<\/p>\n","protected":false},"author":1,"featured_media":165382,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[930,898,846,867],"tags":[1170],"class_list":["post-230044","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-assuntos","category-codigo-2","category-tutoriais","category-wordpress-8","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/230044","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/comments?post=230044"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/230044\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/165382"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=230044"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=230044"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=230044"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}