Como criar um Plugin de WordPress para encurtamento de Links via bit.ly
Quero falar sobre o processo de criação de plugin em WordPress, vou aproveitar o contexto e fazer aqui um que recebe (ou não) um link e retorna um link encurtado pelo site Bit.ly.
O plugin adiciona uma página na área de administração com um pequeno form onde podem ser informados o login e a API key do bit.ly.
O plugin poderá ser chamado no wordpress via outro plugin ou no código do tema utilizado, através de um ou mais métodos que vamos fornecer. Também poderemos chamar o plugin através de um <em>shortcode</em> que vamos criar.
Se não fornecermos um link para encurtamento, o plugin deverá verificar se ele está sendo executando durante um loop e assim retorna o permalink do artigo em questão.
Declarando o plugin no WordPress
Primeiramente devemos criar uma pasta e arquivo com o nome do plugin (evite nome que possa se repetir por outro plugin) dentro do WordPress na pasta: /wp-content/plugins/.
Logo em seguir, vamos editar o arquivo do plugin, que seja um arquivo em PHP. No topo do arquivo, vamos inserir:
/*
Plugin Name: Nome do Plugin
Plugin URI: link para a página do plugin
Description: descrição do plugin
Author: Nome do autor
Version: 1.0
Author URI: site do autor
*/Criando a função para encurtamento de links
Agora vamos direto pro método que vai trabalhar no encurtamento do link utilizando a API do bit.ly:
function processarLink($url) { $bitlyLogin = 'leobalter'; $bitlyAPIKey = 'blablablablabla'; if ( !$url && in_the_loop() ) { $url = get_permalink(); } if ( !$url ) { return false; } // use esse hack para garantir que o urlencode não seja usado uma segunda vez seguida $url = urldecode($url); $url = urlencode($url); $api_call = file_get_contents("http://api.bit.ly/shorten?version=2.0.1&longUrl=".$url."&login=".$bitlyLogin."&apiKey=".$bitlyAPIKey); // o bitly retorna a informação toda em json $bitlyinfo = json_decode(utf8_encode($api_call),true); if ( $bitlyinfo['errorCode']==0 ) { return $bitlyinfo['results'][urldecode($url)]['shortUrl']; } else { return false; } }
Adicionando opções dinâmicas no menu de administração no WordPress
Excelente, já temos uma função pronta que vai retornar o link encurtado. Com isso o plugin já funcionaria, mas vamos incrementar pequenas partes.
Primeiro adicionamos uma ação ao hook do menu de administração do WordPress, essa ação vai criar uma nova entrada na parte de opções do menu:
if (is_admin()) add_action('admin_menu', 'bitly_adminmenu'); function bitly_adminmenu() { add_options_page( 'Encurtamento Bit.Ly' , 'Encurtamento Bit.Ly' , 'manage_options' , 'opcoes-bitly' , 'mostraOpcoesBitly' ); }
Na função bitly_adminmenu a gente usa o método add_options_page que recebe o nome da nova entrada no menu, o título da página, o requisito mínimo para poder acessar a página (manage_options é equivalente a um administrador padrão), o url “falso” da página e função responsável pela exibição da página.
Agora temos que chamar a função pra fazer a saída da página de opções de nosso plugin:
function mostraOpcoesBitly() { if (!current_user_can('manage_options')) { wp_die( __('You do not have sufficient permissions to access this page.') ); } if ( isset($_POST['atualizarBitLy']) ) { echo '<div class="updated"><p>Dados atualizados!</p></div>'; update_option('bitlyAPIKey', $_POST['bitlyAPIKey']); update_option('bitlyLogin', $_POST['bitlyLogin']); } $bitlyLogin = get_option('bitlyLogin'); $bitlyAPIKey = get_option('bitlyAPIKey'); ? > <div class="wrap"> <h3>Bit Ly API info</h3> <form id="opcoesbitly" method="POST"> <p> <label for="bitlyLogin">Login:</label> <input type="text" value="< ?php echo $bitlyLogin; ? >" id="bitlyLogin" name="bitlyLogin" /> </p> <p> <label for="bitlyAPIKey">API Key:</label> <input type="text" value="< ?php echo $bitlyAPIKey; ? >" id="bitlyAPIKey" name="bitlyAPIKey" /> </p> <p> <input type="submit" name="atualizarBitLy" value="< ?php _e('Update'); ? >" />; </p> </form> </div> < ?php }
O mais importante a se prestar atenção nessa página é o uso do get_option e update_option. São duas funções importantes que vão servir de ponto de comunicação com o output do plugin.
Seguinte: a função vai buscar valores com o get_option e usa-los para exibir no nosso form. Esses valores se referem a chaves que denominamos por conta própria, porém eles ficarão gravados no banco de dados utilizado pelo WordPress (no caso o do seu site).
Quando há a opção de atualizar os dados pelo form, vamos à utilização do método update_option que vai gravar os valores informados. Note que se ainda não houver uma option com a chave fornecida, ela será criada.
Retornando os valores dinâmicos no output
Vamos agora alterar nossa primeira função para receber os valores que serão gravados.
Onde tinhamos essa parte:
function processarLink($url) { $bitlyLogin = 'leobalter'; $bitlyAPIKey = 'blablablablabla'; (...)
Vamos substituir por:
function processarLink($url) { $bitlyLogin = get_option('bitlyLogin'); $bitlyAPIKey = get_option('bitlyAPIKey'); if ( ! $bitlyLogin || ! $bitlyAPIKey ) { return false; }
Mais fácil fica bem difícil, não?
Usando o shortcode
Agora vamos implementar um shortcode, ou seja, um pequeno comando para inserirem na edição do artigo que será substituído pelo link encurtado, como o [pegalinkcurto], por exemplo.
add_shortcode('pegalinkcurto', 'usarShortcodeBitly'); function usarShortcodeBitly($atts) { extract( shortcode_atts( array('url' => ''), $atts ) ); return processarLink($url); }
Moleza. Nós adicionamos um hook para o shortcode [pegalinkcurto] que vai chamar a função usarShortcodeBitly. Dentro dessa função eu chamo o método shortcode_atts que vai determinar falores default para as chaves do shortcode que vou trabalhar e usar um extract.
Com o valor – ou não – da url passada eu retorno o resultado da função processarLink().
É importante usar o return, é ele quem vai determinar a substituição do shortcode.
Para implementarmos o argumento no shortcode é bem simples:
[pegalinkcurto url="http://yayquery.com.br"]
Está pronto, temos um plugin com página de opções no admin do WordPress, com uso de shortcode e rodando sem mistérios.
Gostou? Você pode baixar uma versão completa em http://leobalter.net/projetos/leobalterBitly.zip.

Deixar uma resposta