Assim como os posts e páginas, os arquivos de mídia também são tratados pelo WordPress como posts, mas com algumas diferenças como, por exemplo, o valor do post_type. O post_type é um campo no banco de dados do WordPress da tabela wp_posts que identifica o tipo de post que você está gravando. Antes de trabalharmos com os arquivos anexados precisamos entender um pouco sobre esta arquitetura de informação do WordPress.
Os posts, páginas e arquivos são gravados como posts na mesma tabela do banco de dados mas, com post_type diferentes para serem manipulados separadamente. O valor do post_type dos posts é post, das páginas o post_type é page e dos arquivos de mídia o post_type é attachment.
Os posts do tipo attachment também se diferem entre si, como existem vários tipos de arquivos como imagem, áudio e vídeos entre outros, é importante para o WordPress poder manipulá-los separadamente quando preciso. Eles são diferenciados através do valor do campo post_mime_type que é gravado automaticamente dependendo do tipo de arquivo. Abaixo segue alguns mime types usados pelo WordPress.
- Imagem: image
- Imagem JPG: image/jpeg
- Vídeo: video
- Vídeo AVI: video/avi
- Áudio: audio
- Áudio MP3: audio/mpeg
- Documentos: application
- PDF: application/pdf
- ZIP: application/zip
Os posts do tipo attachment podem estar ou não anexados a um post. Quando fazemos o upload de um arquivo direto pela área de Midias no painel do WordPress (imagem 1), esse arquivo é inserido sem estar anexado a algum post. Mas quando fazemos o upload de algum arquivo pela área de cadastro de um novo post utilizando os botões de upload (imagem 2), então esse arquivo é gravado sendo anexado a este post.
O arquivo anexado grava a referência do post. Esse post do tipo attachment agora é um post filho do post ao qual foi feito o upload. Esta informação é gravada no campo post_parent do banco de dados na tabela wp_posts.
Precisamos então, para trabalhar melhor com os arquivos, saber as seguintes informações destes posts do tipo attachment, que são: post_type, post_mime_type e post_parent.
Existem várias funções no WordPress para se trabalhar com posts do tipo attachement, vou mostrar como se trabalhar com esse tipo de post utilizando a função get_posts() mostrando alguns exemplos.
1.Exibindo todos arquivos de mime type imagem anexados ou não a algum post.
1 2 3 4 5 6 7 8 | //Primeiro criamos uma variável que vai receber uma array contendo os parâmetros que queremos usar para filtrar o resultado da consulta $args = ('post_type'=>'attachment','post_mime_type'=>'image'); //Agora criamos outra variável que vai receber o resultado da consulta $attachment_data = get_posts($args); //Podemos agora exibir na tela a lista de todas as imagens usando o foreach foreach( $attachment_data as $attachment ): echo '<p><img src="'.$attachment->guid.'"/></p>'; endforeach; |
2.Exibindo todos os arquivos de mime type imagem anexados a um post, dentro de um loop
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | if( have_posts() ): while( have_posts() ):the_post(); the_title('<h2>', '</h2>'); the_content(); //Inicio - exibindo os arquivos de imagem anexados ao post //Primeiro criamos uma variável que vai receber uma array contendo os parâmetros que queremos usar para filtrar o resultado da consulta $args = ('post_type'=>'attachment','post_mime_type'=>'image','post_parent'=>$post->ID); //Agora criamos outra variável que vai receber o resultado da consulta $attachment_data = get_posts($args); //Podemos agora exibir na tela a lista de todas as imagens usando o foreach foreach( $attachment_data as $attachment ): echo '<p><img src="'.$attachment->guid.'"/></p>'; endforeach; //Fim endwhile; else: echo '<p>Nenhum post encontrado</p>'; endif; |
3.Exibindo todos os arquivos de mime type pdf como uma lista de links
1 2 3 4 5 6 7 8 9 10 | //Primeiro criamos uma variável que vai receber uma array contendo os parâmetros que queremos usar para filtrar o resultado da consulta $args = ('post_type'=>'attachment','post_mime_type'=>'application/pdf'); //Agora criamos outra variável que vai receber o resultado da consulta $attachment_data = get_posts($args); //Podemos agora exibir na tela a lista de links para os arquivos do tipo pdf echo '<ul>'; foreach( $attachment_data as $attachment ): echo '<li><a href="'.$attachment->guid.'"/>'.$attachment->post_title.'</a></li>'; endforeach; echo '</ul>'; |
As aplicações são inúmeras. Mostrei esses exemplos para vermos algumas das aplicações. Todavia, podemos, por exemplo, usar os arquivos do tipo mp3 anexados ao um post para exibir no post uma playlist com as músicas. Então fica aí um desafio de aprendizado para você excercitar seus conhecimentos adquiridos.
