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 😋