Como criar um plugin WordPress

Pessoal, o post de hoje é cópia a uma resposta que enviei para uma lista de discussão por e-mail para um parceiro que queria saber como criar um plugin wordpress. Fiquei com preguiça de corrigir os erros de português e testar as funções e por conta disto não iria publicar aqui no blog, mas o Fernando Caldas insistiu por lá e achei bacana colar aqui a resposta, então desculpem os possíveis erros e espero que curtam o post.

Desenvolvendo um plugin wordpress

Você sabe programar em PHP? Tem noções de programação orientada a objetos?

Se responder não para qualquer uma das perguntas acima talvez não seja a hora de começar a desenvolver um plugin para WordPress, primeiro aprenda PHP e estude um pouco sobre orientação a objetos, acredite, sem isso você pode até fazer um plugin seguindo tutoriais na net, mas vai ser muito complicado.

Já trabalhou com algum framework para desenvolvimento PHP ou API?

No desenvolvimento de plugins para WP você trabalha um pouco igual ao desenvolvimento de uma aplicação com framework ou API, existem métodos, classes, filtros e ações pré definidas que você vai precisar para trabalhar.

Vamos lá…

Para desenvolver um plugin para WP você vai seguir os procedimentos normais de desenvolvimento de qualquer aplicação web com a linguagem PHP a unica diferença é que vai precisar estudar o CODEX do WordPress para conhecer as funções pré definidas que vão facilitar sua vida.

Eu basicamente utilizo actions e filtros para decidir quando as funções do meu plugin devem ser chamadas, se eu quero incluir algo quando um post for exibido então uso o filtro the_content que chama uma função do plugin passando como parametro o conteúdo do post e recebe de volta o conteúdo que deverá ser exibido.

A sintaxe é:

add_filter(‘the_content’,'funcao’);

Exemplo simples de uso deste filtro, vamos imaginar que você deseja incluir um rodapé em todos os posts do seu blog, para não precisar editar tudo novamente você pode criar um plugin com o código abaixo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
/*
Plugin Name: NOME DO SEU PLUGIN
Plugin URI: http://leobaiano.com/
Description: DESCRIÇÃO DO PLUGIN
Version: 1.0
Author: Leo Baiano
Author URI: http://leobaiano.com/
*/
 
// Acima você passa as informações necessárias do seu plugin
 
/**
 * Rodapé
 *
 * @param string $conteudo - Variavel com o conteúdo original do post
 * @return string $new_conteudo - Variavel retornada com o novo conteúdo do post
*/
function rodape($conteudo){
	// Abaixo defino o rodapé que vai aparecer no meu post
	$rodape = "<br /><br />---<br />A cópia deste texto é autorizada desde que mantenha os créditos ao autor.";
 
	// Abaixo gravo o novo conteúdo do post que será o conteúdo original mais o rodapé definido na variavel acima.
	$new_conteudo = $conteudo.$rodape;
 
	// Retorno o novo conteúdo do post
	return $new_conteudo;
}
 
// Filtro que chama a função rodape e passa o conteudo do post
// Essa rotina vai acontecer toda vez que o post for chamado
add_filter('the_content','rodape');
?>

Vamos supor que você precisa incluir alguma informação no cabeçalho do blog, a chamada para um arquivo JS ou CSS por exemplo, então pode utilizar a action wp_head. Essa action chama uma função que deverá imprimir o conteúdo que você deseja incluir no cabeçalho da página. É importante lembrar que para que a action funcione corretamente o tema precisa ter o gancho wp_head() no cabeçalho da página.

A sintaxe básica é:

add_action(‘wp_head’, ‘funcao’);

Seguindo o mesmo padrão você pode utilizar a action wp_footer para incluir conteúdo no rodapé do blog, para que funcione o tema precisa do gancho wp_footer();

Sintaxe: add_action(‘wp_footer’, ‘funcao’);

Muitos desenvolvedores de plugin utilizavam a action wp_footer para incluir os créditos, o plugin wp-hotwords do BernaBauer, por exemplo, exibe a mensagem de que o blog utiliza tal plugin e inclui um script muito importante no footer do blog.

Uma action que eu acho muito interessante e com milhares de possibilidades é a publish_post que é acinada toda vez que um post é publicado, ela chama uma função e envia como parametro o ID do post que foi publicado.

Sintaxe: add_action(‘publish_post’, ‘funcao’);

Agora vamos a um exemplo um pouco mais complexo de plugin, vamos imaginar que você deseha twittar o link do seu post sempre que publicar um post novo no blog.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<?php
/*
Plugin Name: NOME DO SEU PLUGIN
Plugin URI: http://leobaiano.com/
Description: DESCRIÇÃO DO PLUGIN
Version: 1.0
Author: Leo Baiano
Author URI: http://leobaiano.com/
*/
 
// Acima você passa as informações necessárias do seu plugin
 
/**
 * twittar
 *
 * @param int $id_post - Variavel com o ID do post
 * @return boolean - Retorna falso ou verdadeiro a depender do sucesso ou não da operação
*/
function twittar($id_post) {
 
	// Recupera os dados do post com base na sua ID	
	$post = get_post($id_post);
 
	// Recupero a URL do post
	$url = get_permalink($id_post);
 
	// Chama a função que vai enviar a mensagem
	$envio = enviarMensagem($url);
 
	// If enviado com sucesso returna verdadeiro
	if($envio){	
		return true;
	}
 
	// Se não enviar retorna falso
	else {
		return false;
	}
}
 
/**
 * Envio a URL para o twitter
 *
 * @param string $url - Variavel com o a URL do post
 * @return boolean - Retorna falso ou verdadeiro a depender do sucesso ou não da operação
*/
function enviarMensagem($url) {
 
	// Define o usuario do twitter
	$usuario = "seu_usuario";
 
	// Define a senha do twitter
	$senha = "sua_senha";
 
	// Abaixo preparo o envio da URL para o twitter
	$saida = "POST http://twitter.com/statuses/update.json HTTP/1.1\r\n";
	$saida .= "Host: twitter.com\r\n";
	$saida .= "Authorization: Basic ".base64_encode ("$usuario:$senha")."\r\n";
	$saida .= "Content-type: application/x-www-form-urlencoded\r\n";
	$saida .= "Content-length: ".strlen("status=$url")."\r\n";
	$saida .= "Connection: Close\r\n\r\n";
	$saida .= "status=$url";
	$fp = fsockopen ("twitter.com", 80);
 
	// Se enviado com sucesso retorno verdadeiro
	if (fwrite($fp, $saida)) {
		return true;
		fclose($fp);
	}
 
	// Caso contrario retorno falso
	else {
		return false;
	}
}
 
// Incluimos a action que vai chamar a função twittar sempre que um post for publicado
add_action('publish_post', 'twittar');
?>

A resposta ficou tão grande que cheguei a pensar publicar um post, mas deu preguiça de corrigir os erros de português e testar os exemplos, mas enfim, da pra ter uma idéia.



Se você gostou deste post, escreva um comentário e/ou cadastre-se em nosso feed.

Comentários

Olá caro Leo, ficou bom esse teu artigo sobre plugin. Dá pra ter a tal idéia sim, rs.

Escreva um Comentário

(obrigatório)

(obrigatório)