{"id":230614,"date":"2022-12-01T10:29:00","date_gmt":"2022-12-01T07:29:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230614"},"modified":"2022-11-09T23:12:29","modified_gmt":"2022-11-09T20:12:29","slug":"adicionando-uma-classe-corporal-com-base-em-um-modelo","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/adicionando-uma-classe-corporal-com-base-em-um-modelo\/","title":{"rendered":"Adicionando uma classe corporal com base em um modelo"},"content":{"rendered":"\n<p>Trabalhar com templates no WordPress \u00e9 algo que n\u00e3o \u00e9 incomum. Tudo \u00e9 um tipo de modelo &#8211; desde o modelo de p\u00e1gina principal, modelo de p\u00e1gina \u00fanica, modelo 404 &#8211; at\u00e9 modelos personalizados.<\/p>\n<p>\u00c0s vezes, por\u00e9m, voc\u00ea pode querer aplicar uma classe ao <code>body<\/code>elemento com base no modelo que est\u00e1 sendo usado para que voc\u00ea possa estilizar esse modelo espec\u00edfico de maneira um pouco diferente do restante do site.<\/p>\n<p>Embora voc\u00ea possa fazer isso de v\u00e1rias maneiras diferentes, para faz\u00ea-lo, todos n\u00f3s temos nossos m\u00e9todos, ent\u00e3o pensei em compartilhar o meu.<\/p>\n<h2>Classe corporal com base em um modelo<\/h2>\n<p>Antes de entrar no c\u00f3digo para adicionar uma classe de corpo com base em um modelo, \u00e9 importante observar que estou assumindo que o modelo \u00e9 nomeado no seguinte formato: <code>template-{name-of-template}.php<\/code>.<\/p>\n<p>Ent\u00e3o, digamos que voc\u00ea esteja trabalhando em um modelo para exibir informa\u00e7\u00f5es sobre o peso que voc\u00ea perdeu em um m\u00eas e deseja faz\u00ea-lo usando um modelo para isso. O modelo pode ser nomeado <code>template-weight-loss.php<\/code>.<\/p>\n<p>Aqui est\u00e1 a coisa: Aplicar o nome da classe a uma \u00fanica p\u00e1gina que usa este modelo n\u00e3o \u00e9 grande coisa. Mas se voc\u00ea tiver v\u00e1rias p\u00e1ginas que usam esse modelo (o que, se voc\u00ea executar um site no qual v\u00e1rias pessoas podem estar usando esse modelo, faz sentido, certo?) ent\u00e3o voc\u00ea vai querer ter certeza de aplicar o nome da classe para cada p\u00e1gina que como este modelo.<\/p>\n<p>Mas como?<\/p>\n<p>Existem v\u00e1rias maneiras de fazer isso, mas requer pelo menos o seguinte:<\/p>\n<ol>\n<li>Conectando-se ao gancho <strong><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/body_class\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">body_class que<\/a><\/strong> o WordPress fornece,<\/li>\n<li>Lendo o nome do modelo,<\/li>\n<li>Aplicando-o ao nome da classe do corpo (se a p\u00e1gina estiver usando o modelo)<\/li>\n<\/ol>\n<p>Felizmente, \u00e9 f\u00e1cil de fazer porque o hook passa um array de classes para uma fun\u00e7\u00e3o hooked e os metadados de um determinado post incluem se est\u00e1 ou n\u00e3o usando um template.<\/p>\n<p>Com isso dito, <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/e053ff5fdc82af9854bf7031d57a759d#file-00-add-body-class-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">veja como isso pode ser alcan\u00e7ado:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\nadd_filter('body_class', 'acme_add_body_class');\n\/**\n * If the current page has a template, apply it's name to the list of classes. This is\n * necessary if there are multiple pages with the same template and you want to apply the\n * name of the template to the class of the body.\n *\n * @param array $classes The current array of attributes to be applied to the \n *\/\nfunction acme_add_body_class($classes)\n{\n  if (!empty(get_post_meta(get_the_ID(), '_wp_page_template', true))) {\n      \/\/ Remove the `template-` prefix and get the name of the template without the file extension.\n      $templateName = basename(get_page_template_slug(get_the_ID()));\n      $templateName = str_ireplace('template-', '', basename(get_page_template_slug(get_the_ID()), '.php'));\n\n      $classes[] = $templateName;\n  }\n\n  return array_filter($classes);\n}\n<\/code><\/pre>\n<p>Observe que voc\u00ea pode usar um closure para isso em vez de um nome de fun\u00e7\u00e3o hooked e uma fun\u00e7\u00e3o independente, mas dado que diferentes pessoas lendo isso usam diferentes vers\u00f5es do PHP, a maneira mais f\u00e1cil de demonstrar isso \u00e9 us\u00e1-lo acima.<\/p>\n<h2>Por que fazer isso?<\/h2>\n<p>De um modo geral, se sua p\u00e1gina tiver o mesmo nome do modelo que est\u00e1 sendo aplicado, ela ter\u00e1 um nome de classe que corresponde ao nome da p\u00e1gina.<\/p>\n<p>Ou seja, digamos que voc\u00ea tenha uma p\u00e1gina e seu nome seja Perda de peso. O <code>body<\/code>elemento ter\u00e1 uma <code>weight loss<\/code>classe. Mas se voc\u00ea usar um segundo, terceiro, quarto ou algo assim em uma p\u00e1gina que tenha um t\u00edtulo diferente, ela n\u00e3o ter\u00e1 essa classe.<\/p>\n<p>Se voc\u00ea quiser garantir <code>body<\/code>que o nome da classe seja baseado no modelo, o c\u00f3digo acima garantir\u00e1 que isso funcione.<\/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>Uma maneira f\u00e1cil de aplicar uma classe de corpo com base em um nome de modelo usando APIs do WordPress e fun\u00e7\u00f5es PHP.<\/p>\n","protected":false},"author":1,"featured_media":163533,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[898,722,920,806,846,867],"tags":[1170],"class_list":["post-230614","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo-2","category-desenvolvedor","category-outro","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\/230614","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=230614"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/230614\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/163533"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=230614"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=230614"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=230614"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}