Objota O mundo orientado a objetos

Como criar plugins para wordpress – Parte 4 – publicando seu plugin

Posted on janeiro 29, 2011

Posted by Rodrigo Ireno

Como publicar seu plugin no wordpress.org

Neste artigo veremos os passos necessários para se publicar seu plugin no wordpress.org, site oficial do WordPress.

1º - Caso não tenha um cadastro em wordpress.org, registre-se. Pois é preciso estar logado para solicitar um repositório SVN para você. E uma vez que tenha registro seus plugins serão associados ao seu perfil de usuário do wordpress, o mesmo se aplica caso venha a publicar temas.

2º - Licença, caso você não inclua um arquivo de licença (licence.txt) junto ao seu plugin, será considerado pelo wordpress.org que você assumiu a licença GPL2.

3º - É obrigatório incluir o arquivo readme.txt junto ao seu plugin, pois todas as informações da página de seu plugin serão estraídas dele.

4º - Uma vez pronto, testado e funcionando você poderá solicitar a criação de um diretório SVN para seu plugin. Com este diretório será possível você disponibilizar e manter organizado todas as versões de seu plugin. Inclusive enviar versões como beta (em fase de desenvolvimento e teste).

Para isso será necessário manter seu plugin online em algum lugar e enviar uma solicitação através de um formulário como este, informando nome do plugin, breve descrição do que ele faz e a URL para baixar o seu plugin.

Página de solicitação

obs: para isso é preciso estar logado.

Você receberá um email de confirmação do wordpress.org, neste email constará o endereço de seu SVN a senha de acesso para ele será a mesma de acesso  ao seu perfil no wordpress.org.

5º - Baixar um software para gerenciar seu diretório SVN. Eu utilizo o Tortoise.

Entendendo o readme.txt

Este documento é muito importante, deve ficar na raiz do diretório de seu plugin. Como dito antes, as informações que nele constar serão utilizadas para preencher e formar a página oficial de seu plugin no wordpress.org.

Cada aba das páginas de plugin provem deste arquivo, exemplo: description, faq, changelog, screenshots e etc.

Esta página é destinada aos desenvolvedores: Developer Center

Ainda nela é possível ver os links para faq, informações sobre subversion (SVN) e uma página que contém um exemplo do formato padrão do readme.txt e logo abaixo um link para o validador do readme.txt. É muito importante validar seu arquivo, pois caso haja algum erro crítico seu plugin pode não ser publicado corretamente ou talvez nem seja publicado.

SESSÕES DO README.TXT

=== Título do plugin ===

Contributors:
Nome dos contribuidores...

Donate link:
link para possíveis doações

Requires at least: 3.0
mínima versão requerida do wordpress

Tested up to: 3.0.1
versão do wordpress em que o plugin foi testado

Stable tag: 1.2
Versão estável do plugin

Tags:
palavras chaves que tenham relação ao plugin, são apenas para fim de indexação e busca.

== Descritption ==

descrição do plugin

== Installation ==

descrição da instalação

== Frequently Asked Questions ==

= Pergunta é destacada desta forma =
A resposta vem logo embaixo.

== Upgrade Notice ==

1.2 Nesta nova versão temos uma super novidade.

== Screenshots ==

1. Aqui é a descrição da primeira screenshot. A imagem vai na raiz do plugin seu nome deve ser screenshot-1, screenshot-2 e etc..

2. Aqui vem a descrição da segunda screenshot

== Changelog ==

= 1.2 =
* Esta nova versão foram feitos os melhoramentos de....

= 1.1 =
* Este é primero melhoramento no gerenciamento de...

------------
para fazer um link dentro de uma sessão

[texto do meu link](http://www.destinodomeulink.com.br)

Utilizando o Tortoise

Depois de criado seu repositório e validado seu readme.txt, já podemos então publicá-lo. Para isso vamos primeiro para fim de organização criar na máquina local, um diretório plugins_wordpress, dentro deste diretório vamos criar um diretório com o mesmo nome do nosso plugin. Vou supor que o nome do plugin seja Meu WP, provavelmente o meu plugin terá o seguinte nome de diretório meu-wp.

Agora, selecione a pasta e clique com o botão direito, no menu de contexto irá aparecer:

Clique na opção SVN Checkout e será iniciado um download da estrutura de diretórios de seu SVN, será copiado tudo o que tem lá (no momento só os diretórios).

Para isso você precisa informar o diretório SVN online:

Concluído isso você terá a seguinte estrutura de diretórios ( o nome meu-wp é só um exemplo):

Explicando

Diretório trunk – Neste diretório irá ficar a versão disponível para download.

Diretório tags - Neste diretório serão incluídos todas as verões de seu plugin. Atenção o diretório tags trabalha juntamente com trunk. (vejamos adiante).

Diretório branches – Neste diretório ficam versões não oficiais (Em desenvolvimento ou teste).

O diretório trunk e tags trabalham juntos, portanto vamos supor que minha versão seja a 1.0, então devo colocar os arquivos de meu plugin na pasta trunk e criar um diretório dentro de tags como nome 1.0 e dentro dele colocar o mesmo conteúdo de trunk.

Nota: Aqui se vê a importância de informar a Stable tag no documento readme.txt. Portanto se a minha versão atual é a 1.0, em meu documento preciso informar que a Stable tag é a 1.0.

Certifique-se também de que o cabeçalho do plugin no aquivo principal esteja informando a versão correta do plugin – (isso é geralmente o mais fácil de esquecer).

Estes passos são necessário toda vez que for atualizar seu plugin, (recaptulando):

  • Atualizar seus arquivos na pasta trunk
  • Criar um diretório , dentro do diretório tags, como mesmo nome da minha versão atual e nele depositar o conteúdo da pasta trunk.

Fazendo isso, não terá problemas.

Sincronizando com seu SVN

Depois de feita todas as devidas alterações é só sincronizar. Para isso clique no diretório local de seu plugin, clique com o direito e no menu de contexto irá aparecer a opção Commit. Clique nele e  o processo irá iniciar, neste meio ele irá solicitar login e senha (são os mesmos de seu perfil no wordpress.org) informe-o e siga em frente.

Ele irá atualizar seu repositório, mesmo assim existe uma diferença de alguns minutos para que sua página seja atualizada a seu plugin disponibilizados. Talvez certa que 15 minutos.

Depois disso é só aguardar e verificar a página de seu plugin.

É isso pessoal a série termina aqui, espero que tenham curtido. Até a próxima, duvidas sugestões.. fiquem a vontade para comentar.

Como criar plugins para wordpress – Parte 3 – Internacionalização

Posted on janeiro 28, 2011

Posted by Rodrigo Ireno

Vamos abordar neste artigo como internacionalizar o seu plugin. Apesar de parecer complicado e demorado, hoje existem ferramentas para automatizar este processo. O WordPress é capaz de interpretar arquivos .mo e mostrar o idioma de acordo com a localização informada pelo browser do usuário.

Sendo um plugin feito no idioma inglês, ele terá tradução para, por exemplo, português (Brasil) e vários outros. Mas esta tradução é você quem faz. Então vamos logo a um exemplo prático.

Funções __() e _e()

__() – Esta função retorna a tradução disponível para o idioma capturado. Recebe dois parâmetros. O primeiro é a string (frase) escrita em seu idioma de origem. O segundo é o nome de domínio de texto. Veja adiante com detalhes.

_e() – Esta tem as mesmas características da anterior, porém ao invés de retornar a string ela ecoa na tela ( com echo ).

Este nome de domínio de texto deve ser único, e sempre deve ser fornecido a estas duas funções, pois ele será utilizado como prefixo dos arquivos  “.mo e “.po” de tradução. Por tanto..

Optei por fazer algumas mudanças no plugin do artigo anterior para que possamos utilizá-lo neste artigo. Faça download aqui.

Veja que já incluí as funções __() e _e(). E o nome de domínio é “meu-wp”.

Estando o plugin em inglês e vamos traduzi-lo para português (final pt_BR), o nome dos arquivos .mo e .po seriam respectivamente: meu-wp-pt_BR.po e meu-wp-pt_BR.mo.

Mas como criar estes arquivos?

Através de um software free chamado PoEdit.
Instale-o: PoEdit download

Um arquivo .po é um catálogo de tradução, ao criá-lo o PoEdit cria automaticamente o arquivo .mo , que é o arquivo interpretado pelo wordpress. Ele é bem fácil e intuitivo de usar.

Tendo instalado o PoEdit, mão na massa!

1.       Arquivo > Novo Catálogo

2.       No diálogo que aparece, na primeira aba, Insira nome do projeto e versão; Time de tradutores; E email de contato. (não é necessário preencher mais nenhum campo).

3.       Agora na segunda Aba (caminhos). No campo caminho base, se estiver com um “.” ponto não altere em nada. Abaixo clique no botão (Novo ítem) e informe o caminho onde se encontra os scripts de seu plugin. No meu caso ficou assim: C:\xampp\htdocs\blog\wp-content\plugins\meu-wp.

4.       Agora na aba (Palavras chave). Estão os nomes das funções de que capturam os textos a serem traduzidos. Clique em (novo item) e adicione o nome ­__ e em seguida o nome _e. São justamente o nome das funções que foram implementadas para tradução.

Explicando

O que este software faz não tem segredo, mas ajuda muito na tradução de plugins. Ele faz uso de expressão regular para encontrar as strings a serem traduzidas. Se der uma fuçada vai ver que existe uma variedade de linguagens que ele dá suporte. Basicamente o que ele faz é abrir recursivamente todos os arquivos do diretório que informamos. Neste caso os scripts php.

Depois disso confirme e salve o arquivo dentro da pasta lang, dentro do diretório do plugin. Dê o nome meu-wp-pt_BR, ele será salvo como .po e será criado o .mo simultaneamente.

Se ele ao não encontrou nenhuma string a traduzir você pode forçar outra busca clicando no botão atualizar na barra de ferramentas. Ele irá listar todas as frase e palavras encontradas para tradução. Ao clicar em uma linha a frase aparece num campo abaixo, logo abaixo da frase está um input onde você irá inserir a respectiva tradução para aquela sentença. Agora vem o trabalho de tradução. Ainda não acabou...

Carregando os arquivos de tradução

O WordPress interpreta, porém não carrega automaticamente, você deve informá-lo a respeito dos arquivos, com a função:

load_plugin_textdomain('meu-wp', false, 'meu-wp/lang');

Passando por parâmetro, respectivamente: o nome de domínio, false, e o caminho relativo ao diretório onde se encontram as traduções em formato .mo .

Você deve chamar esta função com um gancho init. Ex:

function iniciar(){
  load_plugin_textdomain('meu-wp', false, 'meu-wp/lang');
}
add_action('init', 'iniciar');

Antes de testar

O plugin foi feito em inglês, mas ele só irá traduzir os plugin se em seu cms estiver configurado como pt_BR , verifique em seu wp-config.php se está configurado desta forma. Estando tudo ok, é só testar.

Se tudo deu certo seu plugin foi traduzido com sucesso. O mesmo se aplica para tradução de temas, mas a função é diferente. Porém com essa base já dá pra andar com as próprias pernas.

É isso! próximo artigo será: o 4º da séria - como publicar seu plugin.


Como criar plugins para wordpress – Parte 2 – Boas práticas

Posted on janeiro 26, 2011

Posted by Rodrigo Ireno

Boas práticas para criar Plugins WordPress

Recentemente publiquei um artigo mostrando como fazer um plugin para WordPress. Mas ele era somente mais um hello world. Para complementar então aquele artigo, elaborei esse com base em algumas pesquisas. E vi que existem, pelo menos, estes bons conselhos a se seguir durante a implementação de um plugin. Disponíveis na documentação oficial

Orientação a Objetos

Desenvolver seu plugin utilizando oop já é uma boa iniciativa. Pois minimiza a zero a possibilidade de conflito de funções (funções com mesmo nome). É inclusive recomendado na própria documentação.

Faça bom uso da API de Plugins

Não tente reinventar o que já está pronto. Faça uso do que já está disponível, pois existem funções para fazer de tudo na Plugin API.

Use o objeto $wpdb para querys.

Para operações com banco de dados, utilize o objeto $wpdb. Utilizando-o corretamente é possível evitar SQL Injection. Utilize o atributo prefix deste objeto para montar suas querys, pois assim é possível seguir o padrão estabelecido durante a configuração de instalação do wordpress. Geralmente o prefixo sugerido pelo wordpress é wp_. Porém o usuário tem total liberdade para alterar isso para joaozinho_, agora diga, como você pode adivinhar isso? Simples, não adivinhe! Faça uso de $wpdb->prefix nas querys.

Operações excessivas com o banco de dados 🙁

Evite fazer operações desnecessárias com o banco. Faça todo o processamento e salve só quando necessário. Muitas operações podem abater o desempenho do CMS. Porém operações com SELECT são bem rápidas, se usadas com consciência. Por exemplo: se quer somente id_post e data, faça um select específico para isso. Evite SELECT * FROM. Isso é fatal para o desempenho do servidor.

Options, usar com moderação

Utilize o mínimo de options! Se possível use somente uma. Como? Simples, é possível inserir arrays associativos como parâmetro, ao inserir com add_option eles são serializados e inseridos na tabela option e ao recuperar com get_option o conteúdo já vem como array.

Uso de bibliotecas: jQuery.. etc.

Caso seu plugin faça uso de bibliotecas como, por exemplo, jQuery ou Prototype, não precisa inserir eles por sua conta. Basta solicitar isso ao WordPress e ele irá chamar para você. Com a função wp_enqueue_script é possível chamar bibliotecas específicas. E para inserir seu script é só usar a função wp_register_script. Mas faça chamada aos scripts somente quando forem realmente utilizados, pois esse arquivo será um peso a mais na hora de carregar as páginas. Compressão de script também é bem vinda.

Nome descritivo para o seu plugin

Essa parte é até meio óbvia, se você fez um plugin que serve para adicionar um botão de twitter na página. Então é natural que seu nome tenha alguma relação, como: add Button twitter, Power Button Twitter e etc. Isso ajuda muito nas buscas, porque ela basicamente procura pelo nome do plugin. Agora, uma vez decidido o nome do dito cujo, utilize um padrão para nomear os arquivos relacionados ao seu plugin. Ex:  meu-plugin.php, meu-plugin-config.php, meu-plugin-style.css, meu-plugin-script.js e etc.

Organização de arquivos

Procure manter bem organizado os arquivos que compõe seu plugin. Agrupe arquivos css, js e imagens em diretórios separados.

Boa limpeza nas desinstalações!

Sempre programe uma função de desinstalação, pois sujeira acumulada prejudica o desempenho do CMS. E pode trazer problemas até mesmo para uma futura instalação do próprio plugin autor dos itens esquecidos. Apague tabelas, options, imagens e outros. Se possível seria bom até mesmo mostrar ao usuário o que foi excluído.

Implementar para internacionalização

Não é difícil e nem arranca pedaço! Para internacionalizar seu plugin primeiro é preciso implementá-lo com as funções __() e _e().  A função __() retorna uma string e _e() ecoa a string na tela.

Este é um conjunto de boas práticas para se seguir durante a implementação de um plugin. Com certeza devem existir outras. Mas acredito que seguindo-as já seja possível fazer plugins de qualidade. Dando o mínimo de risco aos usuário do CMS.

Considerações finais:

Se você acha que faltou alguma coisa e tem alguma sugestão ou dúvida. Por favor comente! Estas foram algumas recomendações, todas elas encontradas no site oficial (link informado lá em cima).

fim e até a próxima!

Como criar plugins para WordPress – Parte 1

Posted on janeiro 25, 2011

Posted by Rodrigo Ireno

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