Marcelo Mesquita

Apenas mais um desenvolvedor WordPress

Template para subcategorias

As últimas versões do WordPress melhoraram muito a hierarquia de templates, possibilitando criar modelos usando slug de tags ou categorias (category-noticias.php), nome dos autores (author-marcelo.php), tipos de arquivos (image.php) e até criar templates para tipos de posts (single-evento.php archive-evento.php).

Uma coisa da qual sinto falta no WordPress é a possibilidade de criar um template para subcategorias. Dessa forma podemos dividir o site em áreas com cores específicas ou com sidebares diferenciados, por exemplo.

Para resolver esse problema, existe uma função do que recupera as subcategorias de uma dada categoria (get_term_children) e as retorna em um array. Com isso podemos usar a template tag is_category passando esse array como parâmetro.

Por fim basta condicionar o carregamento dos templates no arquivo category.php:

if( is_category( 1 ) or is_category( get_term_children( 1, 'category' ) ) )
  include( 'category-noticias.php' );
elseif( is_category( 2 ) or is_category( get_term_children( 2, 'category' ) ) )
  include( 'category-eventos.php' );
else
  include( 'category-default.php' );

Assim para a categoria 1 e suas respectivas filhas, será usado o template category-noticias.php, para a categoria 2 e suas respectivas filhas será usado o template category-eventos.php e para as demais categorias, será usado o template category-default.php.

Para manter o código limpo, é recomendável que o template category.php tenha apenas as condições e os includes dos arquivos corretos, se você pretende manter o código padrão do template da categoria nesse arquivo, lembre-se de deixá-lo dentro da condição else.

Download

category

11 Comments

  • responder

    Jonas

    6 anos atrás

    Brother, muito interessante essa dica. Porém, o código ficou bagunçado e eu nao consegui testar. Teria como disponibilizar em php? PS.: preciso muito deste codigo. Valeu!

    • responder

      Marcelo Mesquita

      6 anos atrás

      Oi Jonas,
      dei uma melhorada no código dentro do post e adicionei o arquivo para download. Havia um erro no exemplo, mas já o corrigi.

      Obrigado!

    • responder

      Marcelo Mesquita

      6 anos atrás

      Oi Jonas,
      basta usar o in_category() no template single.php com os devidos includes. Semelhante ao que você fez com o template category.php.

      Abraço.

  • responder

    Jonas

    6 anos atrás

    perfeito Marcelo! Testado e aprovado! Você salvou meu dia! Assim que meu projeto estiver no ar, eu te mando o link! Muito obrigado mesmo!

  • responder

    Jonas

    6 anos atrás

    Mais uma dúvida Marcelo. Seria possível eu definir uma single.php para as subcategoria? Algo como : Se é filho da “categoria-x” usar “single-x”. Eu consigo fazer iss manualmente através do seguinte script:http://www.mateusneves.com/wordpress/single-php-crie-templates-para-os-posts-no-wordpress.

    Gostaria de saber se existe alguma forma de deixa-lo dinamico, ou seja, todas as subcategorias de uma categoria abrirem com mesmo single.php

    Valeu!

  • responder

    Jonas

    6 anos atrás

    Perfeito Marcelo! Agora tenho um template para cada category e seu respectivo single. Muito obrigado pela eficiencia e rapidez! Abraços!

  • responder

    Guilherme Aguiar

    6 anos atrás

    Fala Marcelo!
    Esse código também serve para o single.php, mudando um detalhe. Em vez de is_category colocar in_category. Ex.:

    if( in_category( 1 ) or in_category( get_term_children( 1, ‘category’ ) ) )
    include( ‘single-noticias.php’ );
    elseif( in_category( 2 ) or in_category( get_term_children( 2, ‘category’ ) ) )
    include( ‘single-eventos.php’ );
    else
    include( ‘single-default.php’ );

    Flw!

  • responder

    Annye

    6 anos atrás

    Olá. Estou tentando fazer com que uma categoria use um template diferente mas ainda não consegui. Usei o código que você passou acima, mas não funcionou. Como eu estou fazendo em localhost ainda, não tem como colocar o slug em vez de id?
    E se for somente uma categoria que vai mudar o template permanecendo as outras com o template default, precisa colocar o elseif ?

    • responder

      Marcelo Mesquita

      6 anos atrás

      Oi Annye,
      se for só uma categoria, basta criar um template category-slug.php onde o ‘slug’ pode ser substituído pelo slug da categoria.

      Abraço.

  • responder

    Guilherme Aguiar

    6 anos atrás

    O que acha de um artigo para template para SubPáginas?

    Ex.: if (is_page_template(‘nome-do-template.php’)) ……..

    Abraços!

  • responder

    Sérgio Machado

    5 anos atrás

    Olá tudo bem? alguem poderia disponibilinar os arquivos para eu poder estudar
    li varias vezes e tambem os comentarios mas não obtive nenhum sucesso.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *