Criando modelos personalizados para single.php por categoria

Nesses últimos dias, desenvolvendo um projeto, percebi a necessidade de trabalhar com modelos de páginas diferentes no arquivo single.php.

Como todos já sabem, no WordPress podemos utilizar isso para categorias ou modelos para páginas. Nosso problema é que não é um recurso nativo para o arquivo single.php.

Vamos entender melhor como tudo isso funciona:

Se eu tenho uma categoria carros e desejo que essa categoria exiba um layout diferente de outras, basta criar um arquivo chamado: category-carros.php e fazer o formato que deseja com CSS ou recurso que a página tenha necessidade.

Agora, e quando eu clico em um artigo ou post e desejo o mesmo recurso? Como disse anteriormente, o WordPress não possui este recurso nativo para o arquivo single.php e para isso vamos acrescentar um pequeno código no arquivo functions.php:

add_filter('single_template', 'check_for_category_single_template');

function check_for_category_single_template( $t )

{

  foreach( (array) get_the_category() as $cat )

  {

    if ( file_exists(TEMPLATEPATH . "/single-{$cat->slug}.php") ) return TEMPLATEPATH . "/single-{$cat->slug}.php";

    if($cat->parent)

    {

      $cat = get_the_category_by_ID( $cat->parent );

      if ( file_exists(TEMPLATEPATH . "/single-{$cat->slug}.php") ) return TEMPLATEPATH . "/single-{$cat->slug}.php";

    }

  }

  return $t;

}

Com o código acima inserido em seu arquivo, basta agora criar os modelos da seguinte forma:

single-nomedacategoria.php

Caso não exista um modelo personalizado, o WordPress utilizará normalmente o arquivo single.php.

Uma dica simples, porém pode deixar os seus temas com muito mais recursos para desenvolvimento de layout.

Abraços e Sucesso!

WordPress.org – Site Oficial em Português

  • futebolalagoas

    Funciona em taxonomy?

  • Spirit Lorn

    É possível utilizar esse mesmo método para o archive.php? Quero páginas diferentes para visualização por data, mês, ano, autor e categoria… Tem como?

    Obrigado.

  • Rafael Maia

    Como funciona quando um post pertence a 2 categorias, e essas duas categorias tem “singles post” com Layouts diferentes, conforme você explicou ?

    Por Exemplo: Categoria A com uma single-A e Categoria B com uma Single-B (conforme explicado). O que determina a forma de exibição se tiver um post ligado a essas 2 categorias ?

    Obrigado.

  • Rafael Maia

    Meu problema é o seguinte. Estou fazendo um aplicativo do meu site, que está em wordpress. Criei uma categoria Mobile e programei essa categoria em Jquery Mobile. Essa categoria ficou perfeita para celulares. O aplicativo Android/IOS é apenas um Web View para essa categoria Mobile (ficou perfeito).

    O meu problema está exatamente no single.php. Não consigo fazer 2 singles diferentes dentro do mesmo arquivo (single.php). Quando eu abro um post, ele abre no formato do Desktop (lógico), porque só existe a single.php do desktop. Como programo essa “segunda” single ?

    Sem querer ser chato, dá para fazer um sub domínio, instalar o wordpress nesse sub domínio e utilizar o banco de dados WordPress do domínio principal ? Se pudesse, eu criaria esse sub domínio, copiaria a categoria mobile que já está pronta e faria uma single.php nova, e resolveria o problema.

    Obrigado !

    • carlosbortoni

      Olá Rafael!

      Então é bem complicado utilizar duas categorias para o mesmo post. Agora na questão de replicar o mesmo conteúdo para um sub domínio é que seria necessário alimentar dois painéis.

      Acredito que você vai ter que pensar melhor nessa estrutura, até porque para SEO o ideal é ter somente uma categoria.

      abs

    • leonovais

      Rafael Maia, provavelmente você já deve ter resolvido seu problema, mas você poderia dar uma olhada na função wp_is_mobile(); do WordPress, recobri ela recentemente e tem ajudado muito

      codex.wordpress.org/Function_Reference/wp_is_mobile
      Abraço.

  • Willyan Marques

    Era disso que eu precisava!