Organizando páginas com listagem automatica de páginas filhas

O WordPress não foi concebido para ser utilizado como um CMS, mas a capacidade de criação de páginas (artigos que não seguem a cronologia tradicional do blog), a possibilidade de classificação de textos por categorias e a grande flexibilidade da ferramenta, acabam por torná-lo muito eficiente para este tipo de uso.

Tanto o Celso, quanto o Rafael, usam com frequência o recurso de criação de páginas para colocar textos fora da cronologia do blog e aproveitar para não exibí-las aos assinantes do feed. É um recurso bem interessante para adicionar conteúdo que não seria interessante aos leitores, mas que podem atrair vários visitantes. Porém existe um pequeno problema com esta técnica, quando fazemos isso e usamos os métodos tradicionais de navegação do WordPress, acabamos com uma lista interminável de páginas na barra lateral do blog ou não podemos colocar nenhuma, o que traria grande prejuízo para o posicionamento destas páginas.

Uma sugestão que dei para ambos foi a utilização de uma página intermediária, que possuiria um link na barra lateral e esta página intermediária, exibiria uma lista de links para as páginas finais, da mesma maneira que é feito nos CMSs convencionais, quando acessamos alguma categoria ou tipo de conteúdo.

Essa opção resolve dois problemas:

  • Tira a lista imensa de páginas da barra lateral.
  • Mantém a página a poucos "cliques" de distância da home do blog

Ou seja, as páginas continuarão sendo bem indexadas, porém não atrapalharão a usabilidade do blog.

Como funciona:

A solução é dividida em algumas partes, como:

  • Criar um template para a página que vai listar todas as outras páginas filhas;
  • Criar a página utilizando o template acima.
  • Colocar todas as páginas que devem seguir este padrão como filha da página que faz a listagem.

Criando o template da página:

O sistema de temas do WordPress é um dos mais flexíveis que conheço, além dos arquivos tradicionais que podem ser criados, com nomes específicos para desempenhar cada função, ainda é possível criar templates de páginas, que podem ser usados para funções específicas que você possa precisar. Praticamente qualquer coisa que possa ser escrito em PHP pode ser usado como uma página no WP, usando os templates.

Dois exemplos que pode ser feito com os templates, que uso no BrPoint, são:

Para criar nosso template, precisamos copiar o arquivo page.php, por exemplo, com outro nome e adicionar alguns comentários no início do código para que o WP passe a considerar este arquivo como tal.

O código para que o WordPress identifique o arquivo como um template é:

PHP:
<?php
/*
Template Name: Childlist
*/

?>

Este código deve ser a primeira coisa no código da nova página. A partir deste momento já temos um template que podemos usar para criar novas páginas, mas ele ainda faz, exatamente, a mesma coisa que uma página normal, que acabamos de copiar. Precisamos, então, modificar o resto do código para que seja apresentado a lista de páginas que são filhas da página que está sendo exibida.

Para conseguir isso, precisamos acrescentar o código:

PHP:
<ul>
<?php
wp_list_pages("title_li=&child_of=".$post->ID);
?>
</ul>

Esse código pode ser colocado logo abaixo do:

PHP:
<?php the_content(); ?>

Se quiser que a lista de páginas apareça abaixo do texto da página, se quiser que apareça no lugar, basta substituir o código original.

Criar a página usando o template:

Agora que criamos o template, basta criar uma página para usar este template, você pode colocar um texto introdutório, caso tenha mantido o código para exibir o conteúdo (o que recomendo) e depois, basta selecionar o template que acabamos de criar, Childlist, caso tenha seguido exatamente o código até aqui.

seleção de template de página

Uma vez selecionado o template, a página passa a ser apresentada com o código que foi escrito no mesmo, ou seja, exibindo a lista de páginas filhas.

Colocar as páginas como filhas:

Agora que já possuímos uma página que pode mostrar todas as demais, só precisamos alterar as páginas que devem ser exibidas para utilizar esta como página mão.

No meu WP, está traduzido como página principal, se o seu não estiver traduzido, estará como Parent Page, o campo que deve ser alterado para que isto seja definido.

seleção de parent page

Como podem ver na imagem acima, estou colocando a página Posição no Google, como filha da página Ferramentas, que utiliza um template como este.

Acessando as páginas acima, fica fácil perceber como funcionará. No cabeçalho, crio o link somente para as páginas raiz e quando alguém acessar a página em questão verá uma lista com todas as páginas filhas destas.

Para fazer a listagem somente das páginas de primeiro nível, basta usar o código:

PHP:
<?php
wp_list_pages('sort_column=menu_order&depth=1&title_li=');
?>

Conclusões:

O WordPress é considerado, e podemos comprovar várias vezes, uma das ferramentas mais flexíveis disponíveis, por isso muitos blogueiros recomendam-o em detrimento de outras ferramentas.

Agora, ficou fácil arrumar a salada de páginas extras e atrair seus paraquedistas, sem incomodar os leitores fiéis.

PS.: Estou aproveitando para testar o Google Docs como ferramenta para escrever artigos para o WordPress, espero que tudo funcione bem. Funcionando, escrevo o passo-a-passo.

Melhores ofertas para:

Paraquedas, CMS, Páginas, PHP, WordPress

Update: A utilização do Google Docs não deu muito certo, tive que rescrever quase todo o artigo.

Compartilhe e Guarde:
  • StumbleUpon
  • Enviar para o Ueba
  • Rec6
  • Enviar para o LinkK
  • Enviar para o DiHitt
  • Enviar para o LinkLoko
  • Enviar para o WebSapiens
  • Enviar para o LinkTo
  • Technorati
  • Enviar para o Imera
  • Faves
  • Google Bookmarks
  • MySpace
  • del.icio.us
  • Facebook
tabs-top

18 Comentários para “Organizando páginas com listagem automatica de páginas filhas”

  1. Cadê o título? O_o

  2. Rafa disse:

    EU SABIA!
    Eu tinha 88% de certeza de que eles usavam essas técnicas!

  3. [...] Organizando páginas com listagem automática de páginas filhas [...]

  4. Leo Baiano disse:

    Gostei muito Professor, estava procurando um plugin que fizesse algo parecido para evitar postar hypes na minha página principal. Não achei o plugin mas o BrPoint veio com a solução…

    Agora me diz, tem como fazer para além de aparecer o titulo, uma breve descrição como nas categorias usando o the_excert???

    Tentei adaptar mas não consegui, também não tenho muito conhecimento de PHP.

  5. Lu disse:

    Gostei da dica! Uso umas páginas com conteúdo em php que ficam na raiz do blog… nunca tinha pensado em transformá-las em templates com conteúdo em php! Mais um dever de casa para o fim-de-semana. :)

  6. JulioGreff disse:

    Opa, legal! A cada dia me surpreendo mais com o WordPress. Não fazia a menor idéia de que fosse possível, mas já havia visto em alguns lugares. Ótima dica!

  7. Bruno Alves disse:

    David, o Google Docs não enviou o título.

    Rafa, que técnica?

    Rodrigo, obrigado.

    Leo, possível deve ser, mas não me ocorre como, de estalo, vou pesquisar. Acredito que jogando a lista de páginas em um loop, possa fazer isso.

    Lu, vale a pena, pois fica tudo integrado, o problema é quando mudamos de tema, todos os templates têm que ser reescrito.

    Julio, obrigado.

    Abraços

  8. Diego disse:

    Bruno, e como eu faço para exibir “páginas netas”? Suponha que a página mãe tenha três filhas; nesta página mãe eu gostaria de fazer a listagem de todas as netas, separadas em divs para cada “página filha” (que funcionaria como categorias, na verdade) e estes só serem exibidos se houver páginas (ou exibe-se um erro).

    Será que compliquei? hehe

    Abs
    Diego

  9. Bruno Alves disse:

    Diego, terei que pesquisar, mas acho que o próprio wp_list_pages, com o atributo de hierarquia verdadeiro, já deve fazer isso.

    Abraço

  10. [...] usada pelos probloggers para engordar os bolsos na primeira frase do segundo parágrafo deste post. Ele também me confirmou que 90% do seu lucro é proveniente dessa prática um tanto quanto [...]

  11. celsojunior disse:

    Acho que vou providenciar estas mudanças o mais rápido possível, fica bem mais eficaz.

    Valeu pela dica, Brunão! =D

  12. Bruno Alves disse:

    Celso, obrigado.

    Abraço

  13. Leo Baiano disse:

    Professor, seguinte…

    Segui essa dica para criar uma página e evitar publicar hypes para os leitores do meu blog. O problema é que as páginas demoram muito para que o google possa indexar enquanto os posts além de serem indexados no mesmo dia (via home) demoram cerca de 3 dias no meu caso. Tem algo que eu possa fazer para que as páginas possam ser indexadas mais rápida?

  14. Bruno Alves disse:

    Leo, deveria demorar o mesmo tempo que os artigos, só a home que é um pouco mais rápida, mas continue trabalhando que logo logo, mesmo as páginas começarão a indexar bem mais rápido.

    Abraço

  15. Jorge Araujo disse:

    Oi Bruno!

    Bacana a dica e, apesar de ter mais de 2,5 anos me foi extremamente útil.
    Apenas estou encafifado porque eu gostaria que a lista das páginas aparecesse após um texto introdutório, mas em continuação ao conteúdo do post.
    Como está eu apenas estou conseguindo que apareça antes do título ou após os plugins de compartilhamento que estou usando.
    Se você tiver uma dica para me dar em relação a isso agradeceria imensamente.
    Grande abraço e muito obrigado pelas dicas!

    • Bruno Alves disse:

      Jorge, obrigado.

      O problema é que o código do plugin é executado antes, pois está usando um filtro no content.

      Tem duas formas para resolver:

      Colocar esse código em um plugin e usar um filtro, com valor de prioridade menor que o do plugin
      Remover o filtro do plugin e colocar o código dele na mão, no tema, depois desse código.

      Me passa um pouco mais de detalhes (o nome do plugin e qual blog, por exemplo) para que eu escreva sobre o assunto.

      Abraço

      • Jorge Araujo disse:

        Obrigado Bruno pela resposta.

        Estou usando a sua dica na página http://direitoetrabalho.com/oit/ para exibir as suas subpáginas (ou páginas filhas).

        Os plugins que estou utilizando conjuntamente são o Sociable e o PrintFrilendly, sem falar no SimpleTags para os related posts (que acabam ficando misturados com as child pages).

        Abraços!

Comente

XHTML: Você pode usar as tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>