Adicionando Funcionalidades ao Plugin

publicidade
Gostou? Curta e Compartilhe!
Email this to someone
email
Share on Facebook
Facebook
Tweet about this on Twitter
Twitter

Na primeira parte dessa série, criamos um plugin básico, para o WordPress, que usava uma variável contendo algumas mensagens e as exibia em um widget do nosso site. Conhecemos o cabeçalho do WordPress, a classe ‘WP_Widget’, o hook ‘widget_init’ e a função ‘register_widget’ para dar vida ao Nosso Primeiro Plugin. Se você chegou direto neste post e gostaria de ver o primeiro da série, pode acessar a postagem clicando no link que se encontra no final deste tutorial. Mas se já fez o primeiro, espero que tenha dado tudo certo e que o plugin tenha funcionado como esperado, para que possa continuar com a segunda parte. Agora, mãos à obra! Vamos abrir nosso código e continuar de onde paramos.

Hoje vamos fazer algumas mudanças no nosso plugin, para conhecermos mais um pouquinho de programação para o WordPress. Primeiro vamos colocar nossa classe ‘WidgetRandomMessage’ em um arquivo separado, para efeito de organização. Feito isso a nossa pasta do plugin ficará assim:

No arquivo message-widget.class.php ficará o conteúdo da classe. Em seguida faremos a inclusão dela no nosso arquivo principal, conforme abaixo:

<?php

# defininos o caminho da pasta do nosso plugin. Vamos usá-lo no include da nossa classe que agora está em um arquivo separado.
define('MESSAGE_PATH', plugin_dir_path(__FILE__) );

# incluimos a nossa classe 
include( MESSAGE_PATH . '\message_widget.class.php');

?>

A mudança que faremos no nosso plugin, é a troca da origem das mensagens. Antes elas estavam armazenadas em uma variável, mas agora serão guardadas no banco de dados do WordPress. Para esse processo precisaremos criar uma tabela e em seguida inserir os dados nela. Queremos que isso ocorra quando o usuário ativar o plugin e para isso criaremos uma função que será associada ao hook de ativação do plugin, então quando o plugin for ativado nossa função será executada, criando a tabela e inserindo os dados.

<?php
# hooks de ativação e desativação
register_activation_hook(__FILE__,'messages_widget_activate');
register_deactivation_hook(__FILE__,'messages_widget_deactivate');
?>

Para a ativação criaremos a função messages_widget_activate().

<?php
# Aqui temos nossa função de ativação do plugin. Ela será associada ao hook 'plugin_activate' para ser executada na ativação do plugin. Ou seja, se o seu plugin precisa fazer qualquer coisa antes de fucnionar pela primeira vez, essa é a hora.

function messages_widget_activate() {

# sempre que precisarmos manipilar o banco de dados através do WordPress dentro de uma função, precisaremos declarar a variável global $wpdb.

global $wpdb;

$table_name = $wpdb->prefix . "messages_widget";

# O nosso array de citações agora será adicionado ao banco de dados na ativação do plugin.

$citation = array(array('author' => 'Carlos Drummond de Andrade' , 'msg' => 'Ser feliz sem motivo é a mais autêntica forma de felicidade.'), array('author' => 'Carlos Drummond de Andrade' , 'msg' => 'Perder tempo em aprender coisas que não interessam, priva-nos de descobrir coisas interessantes.'), array('author' => 'Fernando Pessoa' , 'msg' => 'Tudo vale a pena quando a alma não é pequena.'), array('author' => 'Fernando Pessoa' , 'msg' => 'Há tanta suavidade em nada dizer e tudo entender...'), array('author' => 'John Ruskin' , 'msg' => 'Somente quando encontramos o amor, é que descobrimos o que nos faltava na vida.'), array('author' => 'Pitágoras' , 'msg' => 'Com organização e tempo, acha-se o segredo de fazer tudo e bem feito.'), array('author' => 'Santo Agostinho' , 'msg' => 'Ninguém faz bem o que faz contra a vontade, mesmo que seja bom o que faz.'), array('author' => 'Santo Agostinho' , 'msg' => 'A angústia de ter perdido não supera a alegria de ter um dia possuído.'), array('author' => 'Santo Agostinho' , 'msg' => 'Ter fé é assinar uma folha em branco e deixar que Deus nela escreva o que quiser.')
	);

# precisamos criar a nossa tabela para armazenar as nossas mensagens. Vamos colocara estrutura dela em uma string.

	$table_message =  "CREATE TABLE `". $table_name . "` (
			`id` int(11) NOT NULL auto_increment,
			`author` varchar(50) NOT NULL,
			`msg` varchar(255) NOT NULL,
			PRIMARY KEY  (`id`))"; 
	
	$wpdb->query( $table_message );

	# verificamos se houve erro na criação da tabela.
	$db_error = $wpdb->last_error;

	if( !$db_error ) {

	# não houve erro, então prosseguimos com a inserção dos dados.
		foreach ( $citation as $key => $value) {

			$wpdb->insert( $table_name, $value );
		}
		

	} else { 

	# ocorreu algum erro e os dados não foram instalados. Futuramente abordaremos o tratamento de erros.
		echo "Ocorreu um erro: " . $db_error; 

	}

}
?>

Precisamos também de uma função de desativação. Ela deverá remover a tabela que criamos bem como os dados que foram adicionados para o nosso widget, na tabela ‘wp_options’. Alguns plugins deixam seus conteúdos quando são desativados, mas esse não é o procedimento correto, então para evitar bagunça no banco de dados do usuário, removeremos tudo o que acrescentamos na ativação. Esta função se chamará messages_widget_deactivate().

<?php
function messages_widget_deactivate(){

	global $wpdb;

	# removemos os dados do widget da tabela wp_options. O WordPress criará um registro na tabela wp_options seguindo o padrão widget_{nome_do_widget}. No nosso caso ficará widget_WidgetRandomMessage.
	delete_option('widget_WidgetRandomMessage');

	# apagamos a tabela do banco de dados.
	$wpdb->query( "DROP TABLE IF EXISTS `" . $wpdb->prefix . 'messages_widget' . "`" );

}
?>

Por fim precisamos alterar função random_citation(), reponsável por passar para o widget os dados da mensagem que será exibida. Antes usávamos array_rand para selecionar uma chave aleatória do nosso array de mensagens, agora usaremos a função rand do mysql como parâmetro do ORDER BY, para que nossa query retorne os reultados em ordem aleatória.

<?php
function random_citation() {

# declaramos a variável global $wpdb que contém a classe responsável pela manipulação do banco de dados do WordPress.
	global $wpdb;

# Antes nós definíamos um número de chave aleatória para retornar a mensagem Agora estamos buscando diretamente da tabela que criamos na inicialização. Então montamos um query que vai trazer, de forma aleatória, um registro da tabela.

	$query = "SELECT * FROM " . $wpdb->prefix . "messages_widget ORDER BY rand() LIMIT 1";

	# usamos o étodo get_results() para recuperar a informação que querermos.

	$messages = $wpdb->get_results( $query, ARRAY_A);

	if( $messages ){ 

		return $messages[0];

	} else {

		return array('author' => 'adm' , 'msg' => 'Nenhuma Mensagem.');
	}

} 
?>

Tabela wp_messages_widget instalada após a ativação do plugin.

E assim terminamos mais uma fase do nosso plugin, mas ainda tem muito para fazer, e na próxima oportunidade criaremos uma pagina onde poderemos incluir novas mensagens no banco de mensagens.

Observações:
A função __(), que utilizei no primeiro tutorial, será usada para internacionalização do nosso plugin e será comentada quando chegarmos nessa fase. Mas para evitar de ter que inserir ela em todas as strings no futuro, já coloco por padrão. Por enquanto basta saber que do jeito que está ela não faz absolutamente nada.

Para acessar a primeira parte desta série clique aqui.

Para acessar a terceira parte desta série clique aqui.

Espero que este texto seja útil para você!

Comente!

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

3 comentários.

Postado por:
Internacionalizando um plugin para WordPress « André Brum em 05/02/2021. […] parte: Criando um Plugin para WordPress;2ª parte: Adicionando funcionalidades ao nosso Plugin;3ª parte: Criando uma página administrativa para o nosso […]
Postado por:
Criando uma página administrativa para o nosso plugin « André Brum em 11/01/2021. […] Se você chegou direto neste post e gostaria de ver a sequência completa da criação do nosso plugins, você pode acessar a primeira parte aqui e a segunda aqui. […]
Postado por:
Criando um plugin para WordPress « André Brum em 03/01/2021. […] Para acessar a segunda parte desta série clique aqui. […]