Wordpress

Post type attachment , entendendo e trabalhando com arquivos anexados ou não aos posts

19/08/11 Wordpress 6

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.

Imagem 01

Imagem 02

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 = array('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 = array('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 = array('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.

Twenty Eleven Theme

05/07/11 Wordpress 1

Twenty Eleven, o tema oficial da nova versão do CMS WordPress 3.2.

Conheça mais sobre este tema oficial, visite o showcase oficial de temas do WordPress.

WordPress 3.2 em português

05/07/11 Wordpress 0

Hoje já podemos fazer o download do WordPress 3.2 em português.

A nova interface ficou muito bacana bem clean e sofisticada.

Façã o download ou atualize a versão pelo painel do WordPress.

Download WordPress 3.2

WordPress 3.2 está pronto!

04/07/11 Wordpress 0

Hoje foi lançado a versão em Inglês do WordPress 3.2. Já pode ser baixada pelo site http://wordpress.org

Abaixo segue o vídeo institucional do WordPress 3.2 com algumas de suas novidades.

Google Maps no WordPress com Shortcode

24/06/11 Wordpress 7

Algum tempo atrás escrevi aqui no blog sobre o que são e como criar shortcodes para o WordPress, uma funcionalidade muito interessante se quiser saber o que são os shortcodes clique aqui para ler o artigo.

No artigo anterior dei alguns exemplos simples do uso do shortcodes, e agora decidi fazer outros shortcodes com funcionalidades mais úteis para usarmos com o WordPress. Este novo que criei tem a função de exibir o mapa de um endereço usando o Google Maps. É uma funcionalidade bastante útil para exibir maps em posts ou pages no WordPress sem que você precise ir no site do Google Maps gerar o mapa depois copiar o código embed voltar no post e colar o código.

Abaixo segue o snipped code para ser inserido no arquivo functions.php do seu tema.

<?php function google_maps($atts){
extract( shortcode_atts( array(
		'endereco' => '',
		'largura' => '',
		'altura' => ''
		), $atts ) );
return '<iframe width="'.$largura.'" height="'.$altura.'" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.com/maps?f=q&amp;source=s_q&amp;q='.$endereco.'&amp;output=embed"></iframe>';
}
add_shortcode("map","google_maps");
?>

Com o código acima no seu arquivo functions.php basta utilizar o shortcode abaixo nos seus posts ou pages para exibir o mapa do endereço.

[map endereco="endereco do local" largura="600" altura="300"]

 

Automatize ainda mais seu tema para WordPress

20/06/11 Wordpress 3

Uma aplicação simples mas de muita utilidade é a utilização de uma pequena função em php e a utilização da função add_filter() do WordPress para dar um replace em trechos de textos dentro do the_content() ou the_excerpt() para automatizar gerando trechos de html padrões como links, endereços, imagens ou até scritps, que irão facilitar mais ainda seu trabalho.

Um exemplo simples é quanto estamos escrevendo um post e citamos algum site conhecido como o WordPress ou Youtube e temos que criar o link nestes textos para estes sites. Como são sites comuns e que geralmente serão citados em seus posts ou páginas, seria muito mais prático você escrever seu texto normalmente sem incluir os links e que o WordPress quando for exibir seu post já convertesse seus textos como “WordPress” ou “Youtube” em links.

Isto é um exemplo bem simples para poder explicar esta funcionalidade, que pode ter várias outras utilidades.

Segue abaixo um exemplo prático do que eu descrevi acima, insira o snippet code abaixo no seu arquivo functions.php do seu tema:

<?php
function wp_replace_text($text){
	$replace = array(
		'wordpress' => '<a href="http://www.wordpress.org" target="_blank" title="Wordpress">Wordpress</a>',
		'youtube' => '<a href="http://www.youtube.com" target="_blank" title="You Tube">You Tube</a>'
	);
	$text = str_replace(array_keys($replace), $replace, $text);
	return $text;
}
add_filter('the_content', 'wp_replace_text');
add_filter('the_excerpt', 'wp_replace_text');
?>