Página Single com layout personalizado de acordo com a categoria do post – WordPress

Quando decido utilizar o WordPress como gerenciador de conteúdo de um projeto web que não possuí a estrutura similar a de um blog já sei que precisarei labutar atrás de uma ou duas soluções não convencionais ou até mesmo desenvolver algo. Eu sei disso, acontece sempre!

Foi em uma dessas listas de discussão que encontrei alguém precisando de ajuda para exibir um layout diferenciado. A questão é a seguinte, no projeto o cliente pediu um layout que muda de acordo com a categoria, nas páginas de categoria é fácil fazer isso, basta lembrar da hierarquia de arquivos do wordpress, o problema era com as páginas de post unico, quando o visitante acessa determinado texto o arquivo chamado é o single.php, o cliente queria identificar a qual categoria o post pertencia e exibir o layout correspondente.

A solução é simples, não precisei de mais que 15 segundos para pensar um algoritmo que resolveria, o problema na verdade é que eu não estava acostumado a chamar a categoria de um post fora do loop e neste caso eu precisava saber a categoria antes de montar o loop já que o design da página dependeria dela.

A idéia era detectar a categoria no inicio do arquivo single e com sitch case incluir o arquivo de layout correspondente, uma pesquisa aqui e ali e então saiu o seguinte código.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
// Chamo a variavel global que me trás as informações do post acessado
global $post;
 
// Aqui eu pego o array com os dados da categoria do post
$categoria_arr = get_the_category($post->ID);
 
// Aqui eu pego o slug da primeira categoria do post
$categoria = $categoria_arr[0]->slug;
 
// inicio o swit que vai verificar a categoria e incluir o arquivo com leyout correspondente
switch ($categoria) {
	case 'x':
		include_once TEMPLATEPATH . '/category-x.php';
	break;
	case 'y':
		include_once TEMPLATEPATH . '/category-y.php';
	break;
	case 'z':
		include_once TEMPLATEPATH . '/category-z.php';
	break;
 
	// Se naõ for nenhuma das categorias com layout pré definido chamo o layout padrão
	default:
		include_once TEMPLATEPATH . '/singl.php';
}
?>

Você pode utilizar a mesma lógica para outras coisas, algo que achei interessante neste aprendizado é a variavel global $post, com ela conseguimos obter as informações do post fora do loop, muito interessante.

Se você gostou deste post, escreva um comentário e/ou cadastre-se em nosso feed.

Comentários

Oie Leo,

Realmente ficou ótimo e o principal de tudo é que o cliente final ADOROU!!!!!

Mais uma vez obrigada..

Interessante!

Muito bacana a solução.

Poxa léo…
Gostei da solução.

Se fosse soh para mudar a página inicial temos a sulução

q seria em configuração – escrita:
escolher uma página estática.

vc eh bom msm…
vlw man.

Poxa léo…
Gostei da solução.

Se fosse soh para mudar a página inicial temos a sulução

q seria em configuração – escrita:
escolher uma página estática.

vc eh bom msm…
vlw man.

Fábio, valeu! Com o amadurecimento do WordPress tem muita gente utilizando ele em portais e um dos detalhes visuais que alguns gostam de utilizar nestes casos é uma identidade visual levemente modificada para cada seção/ categoria. Para criar páginas de categorias especificas podemos criar um arquivo com o id ou slug da categoria, mas quando acessamos o post os arquivos chamados são o single… com essa função é possível modificar o layout do post de acordo com a categoria, achei bacana compartilhar a ajuda que dei para uma colega de lista de discussão.

Só tá faltando o ‘e’ em ‘/single.php’; fora isso tá show, muito bem feito !

Irei postar isso no TudoParaWordPress e te linkar, ok ?

Abraços !

[...] esta dica no blog do Leo Baiano, e a destaco por aqui tal postagem, ótima [...]

Grande Léo, sempre com boas soluções, mandou bem!

a ideia e manera mesmo mais assim o codigo fica menor

ID);

// Aqui eu pego o slug da primeira categoria do post
$categoria = $categoria_arr[0]->slug;
$caminho=TEMPLATEPATH.$categoria;
if(file_exists($categoria)) {

require_once $caminho;
// e o none dos caminho servico e por ai e menos codigo
// da sua forma nao vai aparece um switch gigante por ai wordpress:0)

}
else {

// aqui uma pagina qualquer ou o template single comum
}

?>

tem um erro no codigo que eu postei antes
assim esta certo falha nossa :)
slug;
$caminho=TEMPLATEPATH.$categoria;
if(file_exists($caminho)) {

require_once $caminho;
// e o none dos caminho servico
// da sua forma nao vai aparece um switch gigante

}
else {

// aqui uma pagina qualquer ou o template single comum
}

?>

Verdade Henrique, valeu a dica!

Escreva um Comentário

(obrigatório)

(obrigatório)