Modelos de Temas: Archive.php

Modelos de Temas: Archive.php

Se você já tem algum tipo de experiência com temas no WordPress, alguma vez já deve ter caído em uma página de arquivamentos.

Ele é responsável por mostrar uma lista de postagens agrupadas por categoria, data, autor, tag ou qualquer outra taxonomia personalizada.

Quando seu usuário acessar a página de categorias, data, autor, tag e afins, o WordPress procurará pelo modelo mais específico para carregar a página com base na hierarquia de modelos do tema.

Se não encontrar um modelo mais específico, ele recorre ao archive.php, fazendo com que ele sirva como um modelo genérico para todas as páginas de arquivo.  

Nesta lição, você aprenderá a criar este arquivo junto com suas variações 🤓

Criando o archive.php

Dentro da pasta raíz do seu tema, crie um novo arquivo chamado de archive.php:

<?php
/**
 * O template para exibir páginas de arquivo.
 *
 * @link https://codex.wordpress.org/Template_Hierarchy
 *
 * @package WPMicilini
 * @since 1.0
 */

get_header(); 

?>

<!-- Conteúdo do Archive começa aqui -->

<?php
get_footer();
?>

Como podemos ver, o conteúdo inicial sempre começa com a abertura das tags PHP, onde inserimos algumas informações relevantes sobre o arquivo em formato de comentários, e é claro, importamos o cabeçalho e o rodapé por meio das funções get_header() e get_footer().

No local onde está escrito <!-- Conteúdo do Archive começa aqui -->, é onde faremos a mágica acontecer, inserindo um punhado de código, como estes, que estamos vendo abaixo:

<div class="archive-area">

 <?php if ( have_posts() ) : ?>

 <!-- Início Título do Archive --> 
 <header class="page-header">
 <h1 class="page-title">
 <?php
 if ( is_category() ) :
 single_cat_title();
 elseif ( is_tag() ) :
 single_tag_title();
 elseif ( is_author() ) :
 echo "Autor: ".get_the_author();
 elseif ( is_day() ) :
 echo "Dia: ".get_the_date();
 elseif ( is_month() ) :
 echo "Mês: ".get_the_date(_x( 'F Y', 'wpmicilini'));
 elseif ( is_year() ) :
 echo "Ano: ".get_the_date(_x( 'Y', 'wpmicilini'));
 else :
 echo 'Archives';
 endif;
 ?>
 </h1>
 </header>
 <!-- Fim Título do Archive --> 

 <!-- Início Conteúdos do Archive --> 
 <?php
 while ( have_posts() ) : the_post();
 ?>
 <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
 <header class="dados-cabecalho">
 <?php the_title( '<h2 class="dados-titulo">', '</h2>' ); ?>
 </header>

 <div class="dados-conteudo">
 <?php the_content(); ?>
 </div>

 <footer class="dados-rodape">
 <?php
 if ( 'post' === get_post_type() ) :
 ?>
 <div class="dados-info">
 <?php
 echo 'Publicado em: ' . get_the_date() . ' por ' . get_the_author();
 ?>
 </div>
 <?php
 endif;
 ?>
 </footer>
 </article>
 <?php
 endwhile;
 ?>
 <!-- Fim Conteúdos do Archive --> 

 <!-- Início Navegação de Conteúdos --> 
 <?php the_posts_navigation(); ?>
 <!-- Início Navegação de Conteúdos --> 

 <!-- Início Postagens não encontradas -->
 <?php else : ?>
 <p>Não foram encontradas postagens.</p>
 <?php endif; ?>
 <!-- Fim Postagens não encontradas -->

</div>

No comando acima, começamos definindo uma div que vai encapsular todo o conteúdo que será mostrado dali em diante.

Começamos fazendo a validação com a função have_posts(), para checar se existem postagens a serem mostrada, caso negativo, a execução do código pula para o else, que por sua vez, mostra a mensagem: Não foram encontradas postagens.

No bloco [Título do Archive], criamos um <header> que ficará responsável por armazenar as informações da página que será mostrada.

Note que o archive.php estará abrindo os conteúdos das páginas de categorias, tags, autores, datas, e afins, até porque ele se trata de um arquivo genérico, e é por esse motivo que estamos fazendo diversas verificações com o intuito de atender todos esses conteúdos de uma só vez.

is_category(): Verifica se página atual se trata de uma categoria.

is_tag(): Verifica se a página atual se trata de uma tag.

is_author(): Verifica se a página atual de trata de um autor.

is_day(): Verifica se a página atual se trata de um dia.

is_month(): Verifica se a página atual se trata de um mês.

is_year(): Verifica se a página atual se trata de um ano.

single_cat_title(): Função usada para exibir o título da categoria, em páginas que mostram postagens de uma categoria específica.

single_tag_title(): Função usada para exibir o título da tag, em páginas que mostram postagens de uma tag específica.

get_the_author(): Retorna o nome do autor daquela postagem específica.

get_the_date(): Retorna a data completa da postagem específica. Essa função pode receber parâmetros adicionais.

No bloco [Conteúdos do Archive], estamos carregando o conteúdo específico da página que foi aberta, onde o WordPress já sabe que tipo de conteúdo será carregado dentro do loop.

Se a página atual for uma categoria, o loop carrega as informações relacionadas a aquela categoria.

Se a página atual for uma tag, o loop carrega informações relacionadas a aquela tag, e assim por diante.

Alguns códigos ali presentes já foram debatidos em lições anteriores, sendo assim, focarei naqueles que ainda não conhecemos.

the_ID(): Retorna o ID daquela post.

post_class(): Retorna o formato de conteúdo daquela postagem, aqui ele vai adicionar automaticamente classes como "post", "type-post" (para postagens padrão), "category-nome-da-categoria" (para a categoria da postagem), "tag-nome-da-tag" (para cada tag da postagem) e outras classes relevantes.

É utilizada para adicionar classes CSS a um elemento que exibe uma postagem no loop de postagens, permitindo a flexibilização e estilização da tag HTML.

the_title( '<h2 class="dados-titulo">', '</h2>' ): Função que retorna o título daquela postagem, onde neste exemplo, estamos encapsulando o título em si dentro da tag <h2>.

Por fim, no bloco [Navegação de Conteúdos], estamos fazendo o uso do comando the_posts_navigation(), que é usada para exibir a navegação entre as páginas de postagens, quando há mais de uma página de resultados em um conjunto de postagens.

Veja como ficou o resultado final do arquivo archive.php:

<?php
/**
 * O template para exibir páginas de arquivo.
 *
 * @link https://codex.wordpress.org/Template_Hierarchy
 *
 * @package WPMicilini
 * @since 1.0
 */

get_header(); 

?>

<div class="archive-area">

 <?php if ( have_posts() ) : ?>

 <!-- Início Título do Archive --> 
 <header class="page-header">
 <h1 class="page-title">
 <?php
 if ( is_category() ) :
 single_cat_title();
 elseif ( is_tag() ) :
 single_tag_title();
 elseif ( is_author() ) :
 echo "Autor: ".get_the_author();
 elseif ( is_day() ) :
 echo "Dia: ".get_the_date();
 elseif ( is_month() ) :
 echo "Mês: ".get_the_date(_x( 'F Y', 'wpmicilini'));
 elseif ( is_year() ) :
 echo "Ano: ".get_the_date(_x( 'Y', 'wpmicilini'));
 else :
 echo 'Archives';
 endif;
 ?>
 </h1>
 </header>
 <!-- Fim Título do Archive --> 

 <!-- Início Conteúdos do Archive --> 
 <?php
 while ( have_posts() ) : the_post();
 ?>
 <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
 <header class="dados-cabecalho">
 <?php the_title( '<h2 class="dados-titulo">', '</h2>' ); ?>
 </header>

 <div class="dados-conteudo">
 <?php the_content(); ?>
 </div>

 <footer class="dados-rodape">
 <?php
 if ( 'post' === get_post_type() ) :
 ?>
 <div class="dados-info">
 <?php
 echo 'Publicado em: ' . get_the_date() . ' por ' . get_the_author();
 ?>
 </div>
 <?php
 endif;
 ?>
 </footer>
 </article>
 <?php
 endwhile;
 ?>
 <!-- Fim Conteúdos do Archive --> 

 <!-- Início Navegação de Conteúdos --> 
 <?php the_posts_navigation(); ?>
 <!-- Início Navegação de Conteúdos --> 

 <!-- Início Postagens não encontradas -->
 <?php else : ?>
 <p>Não foram encontradas postagens.</p>
 <?php endif; ?>
 <!-- Fim Postagens não encontradas -->

</div>

<?php
get_footer();
?>

Como abrir a página de archive.php no seu tema?

Existem diversas formas de se fazer isso, alguns deles por meio das seguintes URLs:

  • /?post_type=post
  • /arquivo
  • /archive
  • /category/nome-da-categoria
  • /categoria/nome-da-categoria
  • /ano/mes/dia (2023/11/20)
  • /author/nome-do-autor
  • /autor/nome-do-autor

Como a sua instância do WordPress pode estar em inglês ou português, alguns dos links acima foram mostrados nas duas línguas.

Tenha em mente que algumas URLs acima podem não funcionar por influência da configuração do seu WordPress.

Quais as diferenças entre archive.php, category.php e date.php?

O archive.php é mais genérico e pode ser usado para várias taxonomias, enquanto category.php é específico para categorias, e o date.php é específico para páginas de arquivos de data.

Ou seja, na ausência do arquivo date.php para abrir a URL /ano/mes/dia, o archive.php se encarregará disso.

A mesma lógica se aplica ao category.php para a URL /category/nome-da-categoria.

Variações do archive.php

Assim como em outros modelos de temas do WordPress, o archive.php também conta com algumas variações de arquivos específicos, vejamos:

archive-{post_type}.php: Usado para abrir tipos de postagens personalizadas, por exemplo: archive-movie.php para abrir arquivos que possuem o formato movie.

archive-{taxonomy}.php: Esta variação permite criar modelos específicos para páginas de arquivos de uma taxonomia customizada. Por exemplo: archive-genero.php, voltado para uma taxonomia de gênero.

archive-{category}.php: Esta variação permite criar modelos específicos para categorias. Por exemplo: archive-bebidas.php, caso você crie uma categoria de bebidas.

archive-{tag}.php: Esta variação permite criar modelos específicos para tags. Por exemplo: archive-materiais.php, caso você crie uma tag do tipo materiais.

archive-{date}.php: Esta variação permite criar modelos específicos para datas. Por exemplo: archive-2023-11-20.php para uma data específica, ou archive-date.php que atenderá todas as datas.

archive-{author}.php: Está variação permite criar modelos específicos para autores. Por exemplo: archive-micilini.php que atende o autor Micilini.

archive-{custom}.php: Usamos esta variação quando possuímos taxonomias customizadas, você pode criar modelos específicos usando essa variação. Por exemplo: archive-minha-categoria.php caso você crie uma taxonomia customizada chamada de minha-categoria.

Conclusão

Nesta lição você aprendeu a utilização do arquivo genérico archive.php, que é usado para carregar categorias, tags, autores, datas, taxonomias, quando não existe arquivos mais específicos para atendê-los.

Até a próxima lição 😋