terça-feira, 31 de agosto de 2010

Inserindo código PHP em posts com Shortcode

Post Chamada Shortcode

O WordPress oferece uma forma simples, segura e bastante ‘clean’ de misturar códigos PHP dentro de posts/páginas por meio da Shortcode API. Funciona da seguinte forma:

  1. Crie uma função no arquivo de funções do tema, o functions.php
  2. Evoque a função registrada dentro do post/página envolvida por [] (colchetes)
  3. O WordPress substituirá o shortcode pelo retorno da função

Um problema: criar uma shortcode que exibe a data e hora atual do servidor.

function datahora() {
   return date('d/m/Y HH:ii');
}
add_shortcode('Datahora', 'datahora');

A nossa função não poderia ser mais simples. Mas ela precisa ser registrada para que o WordPress a reconheça. Quem faz isso é a função add_shortcode(nome_da_shorttag, nome_da_funcao_php).

Pronto, agora basta criar um post com o conteúdo:

[Datahora]

Inserindo parâmetros

Parâmetros podem ser usados para refinar um shortcode.

Um problema: inserir um mapa navegável, do Google Maps diretamente em nosso post.

Vamos escrever a função preparada para receber os parâmetros latitude/longitude, altura e largura do mapa.

function mapa($atributos) {
	extract(
	shortcode_atts(array(
		'll'  => '-15.570624,-56.087179',
		'altura'    => 452,
		'largura'   => 350
		), $atributos));
	return "<iframe width="'.$largura.'" height="'.$altura.'" frameborder="0" scrolling="no"
 marginheight="0" marginwidth="0" src="http://maps.google.com/?ie=UTF8&amp;
 ll='.$ll.'&amp;spn=0.014469,0.018239
 &amp;z=15&amp;output=embed"></iframe>";
}
add_shortcode('Gmap', 'mapa');

A nossa função mapa receberá um parâmetro que equivale a um array com os valores vindos do post. Perceba que a primeira coisa que fazemos é tratar os parâmetros com as funções extract e shortcode_atts. A primeira é uma função PHP que converte as chaves de um array em nome de varável. Ex:

$arr = Array('nome' => 'Thiago', 'pais'=>'Brasil');
extract($arr);
echo $nome // Thiago
echo $pais; // Brasil

E shortcode_atts garante que os parâmetros não declarados no post terão um valor padrão, sendo assim, nenhum parâmetro é obrigatório. Vamos aplicar nosso mapa no post pra entender melhor.

[Gmap largura=650 altura=400]

Nosso mapa será renderizado no post com altura = 400 e largura = 650. Como não declaramos latitude/longitude (ll), o valor padrão a ser asumido será a coordenada -15.570624,-56.087179.

Partes do post como parâmetro

Nos exemplos acima usamos shortcodes auto-encapsuladas. Pense como tags XHTML (<br />, <img />). Podemos usar o próprio texto do post como parâmetro. Pra isso precisamos apenas encapsular esse texto com a shortcode, abrindo e fechando. Em nossa função PHP corresponderá ao nosso segundo parâmetro.

Um problema: converter pedaços do nosso post em maíusculo.

function upper($atts, $conteudo) {
return strtoupper($conteudo);
}
add_shortcode('upper-case', 'upper');

No post:

Quero somente [upper-case]esse pedaço do texto[/upper-case] em maíusculo

É bom saber que:

  • shortcode_atts converte os atributos em minúsculo, então é melhor padronizar;
  • usar sempre return e não echo na função PHP. Evite que coisas estranhas aconteçam;
  • existe um terceiro parâmetro para as funções, usado para chamadas calbacks.

Referências:

Tags: ,

Sobre o autor:

Thiago Bussiki
Graduado em Desenvolvimento de Sistemas, Pós-graduando em Design de Interação pelo Instituto Faber-Ludens. Programador PHP desde 2000. Desenvolve projetos em: Ruby on Rails, Flex, Wordpress, Symfony entre outros. Mais informações no LinkedIn. Siga-me no Twitter.

Deixe uma resposta