✅ Notícias, temas e plug-ins da WEB e do WordPress. Aqui compartilhamos dicas e as melhores soluções para sites.

Adicionando uma classe corporal com base em um modelo

24

Trabalhar com templates no WordPress é algo que não é incomum. Tudo é um tipo de modelo – desde o modelo de página principal, modelo de página única, modelo 404 – até modelos personalizados.

Às vezes, porém, você pode querer aplicar uma classe ao bodyelemento com base no modelo que está sendo usado para que você possa estilizar esse modelo específico de maneira um pouco diferente do restante do site.

Embora você possa fazer isso de várias maneiras diferentes, para fazê-lo, todos nós temos nossos métodos, então pensei em compartilhar o meu.

Classe corporal com base em um modelo

Antes de entrar no código para adicionar uma classe de corpo com base em um modelo, é importante observar que estou assumindo que o modelo é nomeado no seguinte formato: template-{name-of-template}.php.

Então, digamos que você esteja trabalhando em um modelo para exibir informações sobre o peso que você perdeu em um mês e deseja fazê-lo usando um modelo para isso. O modelo pode ser nomeado template-weight-loss.php.

Aqui está a coisa: Aplicar o nome da classe a uma única página que usa este modelo não é grande coisa. Mas se você tiver várias páginas que usam esse modelo (o que, se você executar um site no qual várias pessoas podem estar usando esse modelo, faz sentido, certo?) então você vai querer ter certeza de aplicar o nome da classe para cada página que como este modelo.

Mas como?

Existem várias maneiras de fazer isso, mas requer pelo menos o seguinte:

  1. Conectando-se ao gancho body_class que o WordPress fornece,
  2. Lendo o nome do modelo,
  3. Aplicando-o ao nome da classe do corpo (se a página estiver usando o modelo)

Felizmente, é fácil de fazer porque o hook passa um array de classes para uma função hooked e os metadados de um determinado post incluem se está ou não usando um template.

Com isso dito, veja como isso pode ser alcançado:

<?php

add_filter('body_class', 'acme_add_body_class');
/**
 * If the current page has a template, apply it's name to the list of classes. This is
 * necessary if there are multiple pages with the same template and you want to apply the
 * name of the template to the class of the body.
 *
 * @param array $classes The current array of attributes to be applied to the 
 */
function acme_add_body_class($classes)
{
  if (!empty(get_post_meta(get_the_ID(), '_wp_page_template', true))) {
      // Remove the `template-` prefix and get the name of the template without the file extension.
      $templateName = basename(get_page_template_slug(get_the_ID()));
      $templateName = str_ireplace('template-', '', basename(get_page_template_slug(get_the_ID()), '.php'));

      $classes[] = $templateName;
  }

  return array_filter($classes);
}

Observe que você pode usar um closure para isso em vez de um nome de função hooked e uma função independente, mas dado que diferentes pessoas lendo isso usam diferentes versões do PHP, a maneira mais fácil de demonstrar isso é usá-lo acima.

Por que fazer isso?

De um modo geral, se sua página tiver o mesmo nome do modelo que está sendo aplicado, ela terá um nome de classe que corresponde ao nome da página.

Ou seja, digamos que você tenha uma página e seu nome seja Perda de peso. O bodyelemento terá uma weight lossclasse. Mas se você usar um segundo, terceiro, quarto ou algo assim em uma página que tenha um título diferente, ela não terá essa classe.

Se você quiser garantir bodyque o nome da classe seja baseado no modelo, o código acima garantirá que isso funcione.

Fonte de gravação: tommcfarlin.com

Este site usa cookies para melhorar sua experiência. Presumiremos que você está ok com isso, mas você pode cancelar, se desejar. Aceitar Consulte Mais informação