{"id":233357,"date":"2023-02-11T18:02:00","date_gmt":"2023-02-11T15:02:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233357"},"modified":"2022-11-10T20:39:20","modified_gmt":"2022-11-10T17:39:20","slug":"tutorial-de-tema-wordpress-para-iniciantes-parte-11-modelos-de-paginas-personalizados","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/tutorial-de-tema-wordpress-para-iniciantes-parte-11-modelos-de-paginas-personalizados\/","title":{"rendered":"Tutorial de Tema WordPress para Iniciantes \u2013 Parte 11: Modelos de P\u00e1ginas Personalizados"},"content":{"rendered":"\n<p>Nesta li\u00e7\u00e3o do tutorial do tema WordPress para iniciantes, aprendemos sobre modelos de p\u00e1gina, o que s\u00e3o, como cri\u00e1-los e as melhores pr\u00e1ticas. Faremos um modelo de largura total como exemplo. Ao longo do caminho, tamb\u00e9m adicionamos uma classe ao corpo perguntando se a p\u00e1gina est\u00e1 usando um modelo de p\u00e1gina espec\u00edfico.<\/p>\n<h2>O que s\u00e3o modelos de p\u00e1gina<\/h2>\n<p>Os modelos de p\u00e1gina s\u00e3o \u00fateis para casos em que voc\u00ea deseja um layout ou configura\u00e7\u00e3o diferente para uma p\u00e1gina espec\u00edfica. Exemplos comuns de uso de modelos de p\u00e1gina s\u00e3o listar postagens em um tipo de postagem personalizado (por exemplo, portf\u00f3lio, livros ou servi\u00e7os), ter um conte\u00fado ou layout completamente diferente (por exemplo, dentro de colunas) ou at\u00e9 mesmo simplesmente fazer uma p\u00e1gina de largura total (sem barra lateral).<\/p>\n<p>A usabilidade dos modelos de p\u00e1gina diminuiu ap\u00f3s a vers\u00e3o 5.x do WordPress (Gutenberg). O novo editor Gutenberg permite grande flexibilidade para construir tais p\u00e1ginas sem a necessidade de templates de p\u00e1gina. Independentemente disso, aprenderemos como adicionar um modelo de p\u00e1gina personalizado ao nosso tema.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153948-61e516ac9d3c4.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-153948-61e516ac9d3c4.png\" alt=\"Tutorial de Tema WordPress para Iniciantes \u2013 Parte 11: Modelos de P\u00e1ginas Personalizados\" ><\/a><\/p>\n<p>Dentro da metabox &#8220;Page Attributes&quot; para p\u00e1ginas \u00e9 onde aparece a op\u00e7\u00e3o de template de p\u00e1gina. Mas a op\u00e7\u00e3o de template s\u00f3 aparecer\u00e1 se o tema ativo tiver pelo menos um template de p\u00e1gina.<\/p>\n<p>Os modelos de p\u00e1gina tamb\u00e9m podem ser usados \u200b\u200bpara postagens e tipos de postagem personalizados. Ap\u00f3s o WordPress 4.7 e superior, voc\u00ea pode definir para quais tipos de postagem deseja que o modelo esteja dispon\u00edvel. O WordPress adicionar\u00e1 automaticamente a metabox &#8220;Page Attributes&#8221; necess\u00e1ria para esses tipos de postagem.<\/p>\n<h2>Nomenclatura e posicionamento do modelo de p\u00e1gina<\/h2>\n<p>Para come\u00e7ar, voc\u00ea normalmente faria uma c\u00f3pia de qualquer arquivo de modelo mais pr\u00f3ximo do que deseja alcan\u00e7ar com o modelo de p\u00e1gina. Na maioria dos casos \u00e9 <code>page.php<\/code>. Quanto ao nome do seu modelo de p\u00e1gina, depende de voc\u00ea. Mas existem algumas regras e algum bom senso.<\/p>\n<p>\u00c9 tentador simplesmente nomear seu modelo de p\u00e1gina, por exemplo, <code>page-books.php<\/code>para um modelo listando livros de tipo de postagem personalizados. Nunca prefixe seu modelo de p\u00e1gina com &#8216; <code>page-<\/code>&#8216;! Se voc\u00ea se lembrar da <a href=\"https:\/\/codex.wordpress.org\/File:Template_Hierarchy.png#file\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">hierarquia de modelos<\/a> do WordPress, o WordPress procurar\u00e1 <code>page-&lt;slug&gt;.php<\/code>antes de tentar <code>page.php<\/code>, e os usu\u00e1rios do seu tema podem encontrar um comportamento inesperado.<\/p>\n<p>Uma boa pr\u00e1tica \u00e9 prefixar seu modelo de p\u00e1gina com algo que n\u00e3o faz parte dos nomes dos modelos de p\u00e1gina do WordPress. Por exemplo &#8216; <code>pagetemplate-'<\/code>, &#8216; <code>pt-<\/code>&#8216;, ou simplesmente o nome completo &#8216; <code>fullwidth-template.php<\/code>&#8216;. Tamb\u00e9m \u00e9 uma boa pr\u00e1tica mant\u00ea-los em uma subpasta; <code>\/page-templates\/<\/code>no entanto, isso n\u00e3o \u00e9 bom se voc\u00ea quiser que seu tema esteja dispon\u00edvel para estender com um tema filho. Um tema filho n\u00e3o pode substituir modelos de p\u00e1gina que s\u00e3o colocados em uma subpasta no tema pai.<\/p>\n<p>Depois de decidir por um padr\u00e3o de nomenclatura, vamos em frente e criar um modelo de p\u00e1gina.<\/p>\n<h2>Criando um modelo de p\u00e1gina<\/h2>\n<p>Fa\u00e7a uma c\u00f3pia <code>page.php<\/code>e renomeie para <code>pagetemplate-fullwidth.php<\/code>. Para transform\u00e1-lo em um modelo de p\u00e1gina, voc\u00ea precisa apenas adicionar um coment\u00e1rio no in\u00edcio, informando ao WordPress que este \u00e9 um modelo de p\u00e1gina:<\/p>\n<pre><code>&lt;?php \n\/*\nTemplate Name: Fullwidth \n*\/\nget_header(); ?&gt;\n&lt;?php \nif (have_posts()) {\n...<\/code><\/pre>\n<p>Tudo o que voc\u00ea precisa \u00e9 de um coment\u00e1rio no in\u00edcio do arquivo, com &#8220;Nome do modelo: &#8221; e o nome do seu modelo depois. \u00c9 isso! Entre no admin, edite uma p\u00e1gina e voc\u00ea ver\u00e1 a op\u00e7\u00e3o de escolher &#8220;Fullwidth&#8221; como modelo.<\/p>\n<p>Eu mencionei que no WordPress 4.7 voc\u00ea pode definir para quais tipos de postagem voc\u00ea deseja que o modelo de p\u00e1gina esteja dispon\u00edvel. No momento, est\u00e1 dispon\u00edvel apenas para p\u00e1ginas, mas digamos que voc\u00ea queira a op\u00e7\u00e3o de fazer postagens de largura total tamb\u00e9m? Nesse caso, adicione &#8220;Template Post Type:&#8221; dentro do mesmo bloco de coment\u00e1rios e defina seus tipos de postagem separados por v\u00edrgula. Por exemplo, para disponibiliz\u00e1-lo para postagens e p\u00e1ginas;<\/p>\n<pre><code>&lt;?php \n\/*\nTemplate Name: Fullwidth \nTemplate Post Type: post, page\n*\/\nget_header(); ?&gt;\n&lt;?php \nif (have_posts()) {\n...<\/code><\/pre>\n<p>Edite uma postagem e voc\u00ea dever\u00e1 ver uma nova metabox &#8220;Atributos da postagem&#8221;, onde voc\u00ea pode escolher o modelo Fullwidth. Agrad\u00e1vel!<\/p>\n<h2>Alterando o c\u00f3digo em nosso modelo de p\u00e1gina<\/h2>\n<p>Agora vamos editar o modelo de p\u00e1gina para que ele realmente fa\u00e7a algo diferente da visualiza\u00e7\u00e3o de p\u00e1gina \u00fanica. Vamos remover o pedido de template da barra lateral: (eu comentei para torn\u00e1-lo mais vis\u00edvel, mas voc\u00ea pode simplesmente deletar a linha).<\/p>\n<pre><code>...\n    ?&gt;&lt;p&gt;&lt;?php _e('No posts, sorry.', 'wptutorial'); ?&gt;&lt;\/p&gt;&lt;?php\n}\n\/\/get_sidebar(); \nget_footer(); ?&gt;<\/code><\/pre>\n<p>Vamos fazer mais uma coisa para tornar nosso modelo de p\u00e1gina mais f\u00e1cil de estilizar. Quando voc\u00ea adiciona CSS, muitas vezes voc\u00ea precisa saber se a p\u00e1gina tem uma barra lateral ou n\u00e3o, para ajustar as colunas\/layout. Lembre -se <code>body_class<\/code>que fornece um monte de classes \u00fateis para o elemento body? E se adicion\u00e1ssemos uma classe personalizada ao corpo que nos informasse se a p\u00e1gina atual tem uma barra lateral ou n\u00e3o?<\/p>\n<h2>Filtrar em<code>body_class<\/code><\/h2>\n<p>Observa\u00e7\u00e3o: voc\u00ea deve ter notado que qualquer p\u00e1gina ou postagem que usa um modelo de p\u00e1gina j\u00e1 recebe uma classe de corpo espec\u00edfica; &#8220;page-template-&#8221; \u2013 em nosso exemplo <code>\"page-template-pagetemplate-fullwidth\"<\/code>. \u00c9 uma classe bastante longa e, al\u00e9m disso, queremos tornar nosso tema mais flex\u00edvel \u2013 e permitir largura total em outros modelos al\u00e9m dos que usam modelo de p\u00e1gina. Por exemplo, voc\u00ea geralmente n\u00e3o quer uma barra lateral na primeira p\u00e1gina, certo?<\/p>\n<p>Nota: Isso apenas adiciona uma classe ao corpo para que o estilo fique mais f\u00e1cil, na verdade n\u00e3o desativa a sa\u00edda da barra lateral. Voc\u00ea tem que se lembrar de excluir <code>get_sidebar()<\/code>onde n\u00e3o quiser.<\/p>\n<p>Vamos adicionar um filtro para <code>body_class<\/code>adicionar uma classe de barra lateral personalizada em nosso <code>functions.php<\/code>, para que voc\u00ea possa adicionar mais posteriormente em outros casos em que n\u00e3o deseja a barra lateral. O WordPress tem uma boa tag condicional para verificar se um template de p\u00e1gina est\u00e1 em uso; <code>is_page_template()<\/code>onde voc\u00ea coloca o nome do seu modelo de p\u00e1gina como par\u00e2metro. Queremos adicionar uma classe se isso n\u00e3o for verdade, ent\u00e3o adicionamos o inverso com &#8220;!&#8221;:<\/p>\n<pre><code>add_filter('body_class', 'wptutorial_body_class_filter');\nfunction wptutorial_body_class_filter($classes) {\n    if (!is_page_template('pagetemplate-fullwidth.php')) {\n        $classes[] = 'has-sidebar';\n    }\n    return $classes;\n}<\/code><\/pre>\n<p>Provavelmente, enquanto estiver desenvolvendo os modelos, voc\u00ea ocasionalmente encontrar\u00e1 modelos aos quais n\u00e3o deseja adicionar a classe da barra lateral e, \u00e0 medida que for adicionando esses casos dentro deste arquivo <code>if<\/code>. Por exemplo, se voc\u00ea n\u00e3o quiser a classe da barra lateral na p\u00e1gina inicial, poder\u00e1 adicionar <code>!is_front_page()<\/code>. Isso adicionar\u00e1 a classe &#8216;has-sidebar&#8217; em todas as p\u00e1ginas, exceto na p\u00e1gina inicial e no modelo de p\u00e1gina:<\/p>\n<pre><code>if (!is_front_page() &amp;&amp; !is_page_template('pagetemplate-fullwidth.php'))<\/code><\/pre>\n<p>Cabe a voc\u00ea quantos modelos de p\u00e1gina voc\u00ea deseja e o que eles devem conter. Esta foi apenas uma simples introdu\u00e7\u00e3o. Se voc\u00ea estiver interessado em como consultar outras postagens dentro de modelos de p\u00e1gina, d\u00ea uma olhada na <a href=\"http:\/\/awhitepixel.com\/blog\/wordpress-theme-tutorial-for-beginners-part-12-custom-post-queries\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">pr\u00f3xima etapa<\/a>.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nesta li\u00e7\u00e3o tem\u00e1tica para iniciantes, aprendemos sobre modelos de p\u00e1gina personalizados no WordPress; o que s\u00e3o, como cri\u00e1-los e as melhores pr\u00e1ticas.<\/p>\n","protected":false},"author":1,"featured_media":223984,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[930,898,898,722,722,837,1110,806,806,837,930,846,846,867,867],"tags":[1170],"class_list":["post-233357","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-assuntos","category-codigo-2","category-desenvolvedor","category-guia-para-iniciantes","category-n-a","category-php-8","category-tutoriais","category-wordpress-8","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/233357","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=233357"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/233357\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/223984"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=233357"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=233357"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=233357"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}