Objota O mundo orientado a objetos

Como criar plugins para WordPress – Parte 1

Posted on janeiro 25, 2011

Neste artigo, vou mostrar como fazer um plugin para WordPress. Nele vamos utilizar algumas funções básicas para introduzir alguns conceitos. Neste caso vou utilizar orientação a objetos. Então vamos fazer:

Um plugin que fará uso de filtros para adicionar uma frase ao final do post. E também utilizar as actions de instalação e desinstalação.

Antes de prosseguir vamos responder algumas perguntas:

O que é um plugin WordPress?

Um plugin é um conjunto de scripts organizado de forma padronizada, que serve para estender as funcionalidades da plataforma WordPress. Existem os mais variados tipos de plugins. Por tanto...

Porque fazer um plugin?

Você deve optar por fazer um plugin somente se não existir, ou se sua funcionalidade não se aplica ao problema que você quer resolver. Como dito antes, exitem plugin’s para fazer de tudo nesta plataforma. Por tanto antes de fazer um, faça uma busca para se certificar de que já não exista um que atenda as suas necessidades.

Tendo tudo isso em mente, vamos em frente. Vejamos agora a estrutura básica de um plugin WordPress:

  • Arquivo principal (O arquivo que irá receber o cabeçalho.). É aconselhável que este arquivo PHP tenha um nome relacionado à sua atividade. Isso ajuda muito na busca (caso você venha publicá-lo).
  • Cabeçalho é um trecho comentado no topo do seu arquivo de plugin.
  • Readme.txt este arquivo é preciso caso venha publicar seu plugin no site oficial.
  • Função de: instalação, desinstalação e negócio

Arquivo Principal

Vamos do início. Suponhamos que você faça um plugin com nome Meu WP. Quando instalado todos os plugins ficam dentro do diretório /wp-content/plugins/. O nome ideal para o diretório deste plugin seria: meu-wp. O nome para o arquivo php, poderia ser: meu-wp.php ou meuWp.php.

Este arquivo principal conterá no início do script o cabeçalho padrão de um plugin, caso ele não tenha não será considerado um plugin pelo WordPress.

Neste arquivo é que devem ser chamadas as funções de instalação e desinstalação. E demais funções utilitárias, como por exemplo criar um aba no menu para o seu plugin ou até mesmo uma composição inteira de menu drop-down.

Cabeçalho

Este é o cabeçalho padrão necessário para seu arquivo plugin. Na própria documentação do WordPress é citado que somente o nome é obrigatório. Mas convenhamos colocar Nome do autor, seu email de contato e site é bem útil, não?! Eis o dito cujo:


/*
Plugin Name: Meu WP
Plugin URI: http://www.meuwp.com.br
Description: Ele faz alguma coisa..
Version: 1.0
Author: Meu nome vem aqui
Author URI: http://www.meusite.com.br
*/

readerme.txt

Este arquivo deve ficar na raiz do diretório do seu plugin (caso você venha publicá-lo). Veja o readme.txt padrão disponível do site oficial ( eles também tem um validador ). Uma coisa a ressaltar sobre este arquivo é que ele irá estruturar a página de seu plugin no site oficial. Muito em breve irei escrever um artigo explicando como postar seu plugin.

Licença

A licença é a padrão GPL2, deve ser incluída abaixo do cabeçalho do plugin.


/*  Copyright YEAR  NOME_DO_AUTOR  (email : EMAIL_DO_AUTOR)

 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License, version 2, as
 published by the Free Software Foundation.

 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
*/

Funções de instalação:

O WordPress disponibiliza uma séria de eventos que podem ser capturados através dos chamados hooks. Com eles é possível especificar a execução de uma função em determinados momentos do processamento deste CMS. Por exemplo, capturar quando o usuário posta algo, ou quando um comentário é exibido. Existe uma infinidade de eventos que podem ser capturados. Veja as referências no final deste artigo.

Nota: Seu plugin não precisa de nenhuma função para ser ativado ou desativado no painel de gerenciamento de plugins. De fato ele só precisa de um cabeçalho. Mas do que adianta ter um plugin que não faz nada rs..

Vejamos então as actions de instalação e desinstalação. Elas já foram feitas especificamente para isso, capturar evento ativação e desativação do plugin:

register activation hook


//Caso chame uma função simples:
register_activation_hook( __FILE__, 'nomeDaFuncao' );

//Caso chame de uma classe:
register_activation_hook( __FILE__, array('NomeDaClasse', 'NomeDoMetodo') );

register deactivation hook


//Para destivar com uma função:
register_deactivation_hook( __FILE__, 'NomeDaFuncao' );

//Para destivar com o método de uma classe:
register_activation_hook( __FILE__, array('NomeDaClasse', 'nomeDoMetodo') );

Criar uma página de configuração de seu plugin

É possível adicionar composições de meu, através das funções: add_menu_page e add_submenu_page.

Funções Utilitárias

A API de plugins do WordPress é muito completa, possui métodos que fazem de  tudo. Um método que vamos utilizar neste artigo é o get_option.

Options no WordPress

É possível através de um conjunto de métodos option capturar, guardar, atualizar e deletar opções do banco de dados sem digitar uma linha de SQL. Mas cuidado o ideal é usar somente uma option para seu plugin. Nestas options podemos capturar dados triviais como url do blog, nome, descrição. Tudo isso utilizando o comando certo passado por parâmetro. Veremos adiante.

Com tudo isso já podemos começar:

Nossa estrutura de trabalho:

Nome do plugin: Meu WP
Nome do arquivo principal: meu-wp.php
Pagina de configuração: meu-wp-config.php
Sub página: meu-wp-sub-pagina.php
Seu diretório: /meu-wp/

O que ele faz:

Ele captura o evento de post; Concatena o conteúdo do post com a frase configurada na sua página de configuração.

Mão na massa finalmente:

Arquivo principal: meu-wp.php

Ele conterá o cabeçalho.


<?php
/*
Plugin Name: Meu WP
Plugin URI: http://www.meuwp.com.br
Description: Ele faz alguma coisa..
Version: 1.0
Author: Meu nome vem aqui
Author URI: http://www.meusite.com.br
*/

class MeuWp{

 public function ativar(){
 add_option('meu_wp', '');
 }
 public function desativar(){
 delete_option('meu_wp');
 }
 public function criarMenu(){

 add_menu_page('titulo Meu WP', 'Meu WP',10, 'meu-wp/meu-wp-config.php');

 add_submenu_page('meu-wp/meu-wp-config.php', 'Sub pagina 01', 'titulo 01', 10, 'meu-wp/meu-wp-sub-pagina.php');

 }

 public function adicionaFrase($textoDoPost){
 $frase = get_option('meu_wp');

 if( strlen( $frase ) > 0 ){
 //famos dar um estilo pra diferenciar do resto!
 $frase = '<span style="color: #f00; font-size: 18px;">'.$frase.'</span>';

 return $frase."<br /><br />".$textoDoPost;
 }
 else{
 return $textoDoPost;
 }
 }
}

$pathPlugin = substr(strrchr(dirname(__FILE__),DIRECTORY_SEPARATOR),1).DIRECTORY_SEPARATOR.basename(__FILE__);

// Função ativar
register_activation_hook( $pathPlugin, array('MeuWp','ativar'));

// Função desativar
register_deactivation_hook( $pathPlugin, array('MeuWp','desativar'));

//Ação de criar menu
add_action('admin_menu', array('MeuWp','criarMenu'));

//Filtro do conteúdo
add_filter("the_content", array("MeuWp","adicionaFrase"));
?>

Página de configuração: meu-wp-config.php

Onde iremos configurar a frase que irá aparecer nos posts.


<?php
$msg = '';

if($_POST){
 update_option('meu_wp', $_POST['frase']);

 $msg = '<div id="message"><p>Frase configurada, veja seus posts agora!</p></div>';
}
?>
<div>
<div id="icon-plugins"><br /></div>

<h2>Meu WP - Configurações</h2>
<?php echo $msg; ?>
<form action="" method="post">
<dt>
 <b>Frase</b>
 <dd>
 <input type="text" name="frase" value="<?php echo get_option('meu_wp');?>"/>
 </dd>
 </dt>
<input type="submit" name="Submit" value="Salvar altera&ccedil;&otilde;es" />
</form>
</div>
</div>

Sub página: meu-wp-sub-pagina.php

Sub-página, só pra exemplificar.


<div>
<div id="icon-plugins"><br /></div>

<h2>Meu WP - sub página 1 - sinto muito, mas não faço nada!</h2>

<form action="" method="post">
<dt>
 <b>hello</b>
 <dd>
 <input type="text" name="nome" value=""/>
 </dd>
 </dt>
<input type="submit" name="Submit" value="Salvar altera&ccedil;&otilde;es" />
</form>
</div>
</div>

Com todos estes arquivos devidamente criados nossa estrutura de diretórios ficou assim:

/meu-wp/meu-wp.php
/meu-wp/meu-wp-config.php
/meu-wp/meu-wp-sub-pagina.php

Explicando...

Método ativar. Este método é chamado pela action de instalação e executa as ações de instalação. Se seu plugin tiver que criar uma tabela, por exemplo, é ali que se deve fazer isso.

Método desativar. Se em ativar você insere seu conteúdo e configurações aqui você remove. Ainda existem plugins que questionam o usuário se ele quer retirar as configurações salvas.

Método criarMenu. Chama o método para criar uma nova composição de menu add_menu_page e add_submenu_page. Para mais informações e possibilidades veja a documentação.

Método adicionarFrase. Este método está sendo chamado por um filter com o gancho the_content, este gancho insere por parâmetro o conteúdo do post. Filtros não alteram o banco de dados, somente apresentação no browser. Existem muitos ganchos, capturando todo tipo de evento. Veja as referências no final da página.

Instalando!

Agora vamos testar! Eu presumo que você tenha um localhost e um wordpress instalado nele. Então é só copiar o sua pasta meu-wp para dentro do diretório /wp-content/plugins/ , acesse o painel de gerenciamento de plugins e vualá! Ele está lá esperando sua ativação.

obs: Se você quiser compactar e testar online mesmo (o que eu não aconselho, a menos que tenha um site só pra teste). Não se esqueça de que o WordPress só descompacta arquivos .zip.

Chegamos ao fim. Fiquem espertos, pois ainda vou postar mais dois artigos para completar este. Qualquer dúvida e sugestão poste aí. Até a próxima.

Download dos arquivos: Meu WP

Agora seguem os links de referência:

Introdução
http://codex.wordpress.org/pt:Plugins

Escrevendo um Plugin:
http://codex.wordpress.org/Writing_a_Plugin

Plugin API:
http://codex.wordpress.org/Plugin_API

Adicionando Menus de Administração:
http://codex.wordpress.org/Adding_Administration_Menus

hook de ativação
http://codex.wordpress.org/Function_Reference/register_activation_hook

hook de desativação
http://codex.wordpress.org/Function_Reference/register_deactivation_hook

Add menu Page:
http://codex.wordpress.org/Function_Reference/add_menu_page

Add sub menu page:
http://codex.wordpress.org/Function_Reference/add_submenu_page

Filter Reference:
http://codex.wordpress.org/Plugin_API/Filter_Reference

Action Reference:
http://codex.wordpress.org/Plugin_API/Action_Reference

Posted by Rodrigo Ireno

Comentários (6) Trackbacks (6)
  1. Excelente post. Tutorial muito bom em todas as 4 partes.

    • É muito fácil de encontrar um tuto na web de como fazer um plugin. Mas os que vi que faltavam mesmo, era alguma orientação na hora de publicar o plugin e como fazer a internacionalização.

  2. Utilização correta da lista de definição:

    Café
    – Quente
    – Com açucar
    Leite
    – Gelado

  3. Sou desenvolvedor php, mas nunca fiz um plugin para wordpress. Gostei do tutorial. Está numa linguagem bem fácil de entender. Parabéns.

  4. Otimo tutorial


Leave a comment