Modelos de Temas: Attachment.php

Modelos de Temas: Attachment.php

O arquivo attachment.php, é exclusivo para tratar mídias que estão armazenadas dentro da seu site wordpress.

É ele quem será chamado para exibir informações específicas sobre seus anexos de mídia.

Como sabemos, é possível fazer upload de diversos tipos de documentos para a sua plataforma do WordPress, e isso incluí: Imagens, Documentos, Áudios e Vídeos.

Consulte a documentação do WordPress para saber mais sobre os tipos de arquivos suportados.

Como fazer upload de arquivos para o WordPress?

Dentro do painel administrativo, no menu esquerdo, vá em Mídia > Biblioteca:

No segundo bloco, existirá um botão chamado [Adicionar arquivo de mídia]:

Ao clicar nele, você é capaz de importar seus arquivos pelo método clica e arrasta, ou quem sabe, selecionar seus arquivos diretamente das pastas do seu computador:

Para que possamos testar essa funcionalidade, não deixe de adicionar uma imagem qualquer, ok?

Ao adicionar a imagem, clique nela para abrir a tela de detalhes do arquivo:

Logo abaixo da URL do arquivo, temos acesso a varios links, sendo um deles chamado de [Ver página de anexo], que nada mais é, do que a URL da página que será responsável por mostrar uma pré-visualização deste arquivo.

E advinha qual será o modelo de template responsável por abrir essa pré-visualização?

Isso mesmo, será o arquivo attachment.php ou uma de suas variações.

Lembre-se que essa página, não representa o caminho absoluto da imagem no servidor, uma vez que, tal caminho está definido no campo de texto da URL do arquivo.

Se você abrir o link [Ver página de anexo], verá que a página está em branco, isso aconteceu porque o arquivo attachment.php não existe no nosso tema.

Mas fique tranquilo que nós iremos resolver isso agora 😁

Criando o attachment.php

Dentro da pasta raiz do seu tema, você precisa criar um arquivo chamado attachment.php:  

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

get_header(); 

?>

<!-- Insira aqui os códigos para mostrar os diferentes tipos de attachments -->

<?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 <!-- Insira aqui os códigos para mostrar os diferentes tipos de attachments -->, é onde faremos a mágica acontecer, inserindo um punhado de código, como estes que estamos vendo abaixo:

<div class="attachment-div">

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

<?php while (have_posts()) : the_post(); ?>

<h1>Arquivo: <?php the_title(); ?></h1>

<div class="attachment-file">
<?php 
 // Verifica o tipo de mídia do anexo
 $mime_type = get_post_mime_type();

 if (strpos($mime_type, 'image') !== false) { // Se for uma imagem, exibe a imagem
 echo wp_get_attachment_image(get_the_ID(), 'full');
 } elseif (strpos($mime_type, 'audio') !== false) { // Se for áudio, você pode adicionar código para exibir um player de áudio
 echo wp_audio_shortcode(array('src' => wp_get_attachment_url()));
 } elseif (strpos($mime_type, 'video') !== false) {// Se for vídeo, você pode adicionar código para exibir um player de vídeo
 echo wp_video_shortcode(array('src' => wp_get_attachment_url()));
 } else {// Se for qualquer outro tipo de mídia, exibe um link para o arquivo
 echo '<p>Download: <a href="' . wp_get_attachment_url() . '">' . basename(get_attached_file()) . '</a></p>';
 }
?>
</div>

<div class="attachment-info">
<?php the_excerpt(); ?>
</div>

<?php endwhile; ?>

<?php else : ?>
<p>Arquivo inexistente, ou não encontrado.</p>
<?php endif;?>

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 attachments a serem mostrados, caso negativo, a execução do código pula para o else, que por sua vez, mostra a mensagem: Arquivo inexistente, ou não encontrado.

the_title(): Exibe o título do post, página ou mídia.

get_post_mime_type(): Retorna o tipo de mídia MIME para um determinado post ou mídia.

wp_get_attachment_image(): Retorna uma tag <img> para a imagem do anexo especificado.

get_the_ID(): Retorna o ID do post atual no loop do WordPress.

wp_audio_shortcode(): Gera um shortcode de áudio do WordPress com base nos atributos fornecidos.

wp_get_attachment_url(): Retorna a URL do anexo.

wp_video_shortcode(): Gera um shortcode de vídeo do WordPress com base nos atributos fornecidos.

get_attached_file(): Retorna o caminho do arquivo físico para um anexo.

As explicações do loop já foram debatidas em lições anteriores, caso ainda tenha alguma dúvida basta acessar este link.      

Como eu faço para recuperar o caminho absoluto do arquivo, e carrega-lo da maneira que eu quiser?

Você pode fazer isso por meio da função get_attached_file(get_the_ID()), e inserir este código dentro de uma <img>, <video>, <audio> ou algum outro link. 

Variações do attachment.php

Como vimos no início deste conteúdo, o attachment.php conta com algumas variações:

attachment-{slug}.php: Quando queremos criar um layout específico para um attachment que contém um determinado {slug}. Por exemplo: attachment-document.php para uma mídia que tem esse nome específico.

attachment-{mime_type}.php: Quando queremos criar um layout específico para um attachment que contém um determinado {mime_type}. Por exemplo: attachment-audio.phpattachment-image.php.

attachment-{ID}.php: Quando queremos criar um layout específico para um attachment que contém um determinado {ID}. Por exemplo: attachment-33.php.

single-attachment.php: Pode ser usado para criar um template específico para páginas de anexos, substituindo o attachment.php padrão.

É importante ressaltar que ao usar as variações ditas acima, o WordPress automaticamente vai reconhecer esses modelos específicos ao exibir seus attachments.

Caso não exista tais arquivos, o wordpress seguirá a hierarquia de modo a abrir o arquivo mais genérico que é o attachment.php.

E caso ele não exista, o wordpress vai procurar pelos arquivos single-attachment.php até chegar no index.php.

O que faz o Modelo de Template: Image.php?

No WordPress, o image.php não é um template padrão específico. Ele só será usado quando você abrir a página de um attachment do tipo imagem. 

Ou seja, o image.php é usado no seu tema para personalizar a exibição de páginas de imagens anexadas.  

Se você criar um arquivo image.php no seu tema, ele será utilizado para exibir suas imagens.

No entanto, é importante notar que o WordPress utiliza por padrão o arquivo attachment.php para páginas de anexos de imagem, e se esse arquivo não estiver presente, ele recorrerá ao single.php ou ao index.php dependendo da sua disponibilidade.

É claro que se você criar o arquivo image.php vazio, o WordPress vai mostrar uma página em branco, pois ainda assim, você precisa dos códigos de loop, funções do wordpress, e tags condicionais, como foi feito no tópico Criando o attachment.php.

Conclusão

Nesta lição você aprendeu sobre o modelo de tema attachment.php e suas variações, além de conhecer também o image.php.

Até a próxima 😁