Tabelas de banco de dados personalizadas no WordPress: parte um

Publicados: 2022-06-27

Nesta série de artigos, veremos como podemos criar tabelas de banco de dados personalizadas no WordPress com ou sem um plugin.

Quando e por que devo usar tabelas de banco de dados personalizadas?

Na maioria dos casos, as tabelas de banco de dados padrão do WordPress que são criadas quando você instala o WordPress são tudo o que você precisa. Essas tabelas contêm todos os tipos de informações, como os tipos de postagens e seus metadados associados. Então, por que você precisaria de uma tabela de banco de dados personalizada?

Eles se destacam quando você está trabalhando com dados que estão fora das informações normais usadas no WordPress. Portanto, você pode querer colocar dados em uma tabela personalizada quando estiver criando um plug-in que precise armazenar informações em um banco de dados. É por isso que você verá que plugins como WooCommerce têm suas próprias tabelas personalizadas.

Hospede seu site com a Pressidium

GARANTIA DE DEVOLUÇÃO DO DINHEIRO DE 60 DIAS

VEJA NOSSOS PLANOS

Além de ser uma maneira mais organizada de armazenar informações, o uso de tabelas separadas pode ajudar a aumentar o desempenho, pois as consultas usadas não precisam pesquisar linhas e mais linhas de dados desnecessários. Em vez disso, eles podem ser direcionados para a tabela 'certa', onde podem encontrar as informações necessárias com mais rapidez e eficiência. Isso se torna muito importante quando as tabelas de banco de dados começam a crescer.

Criando uma tabela de banco de dados personalizada do WordPress

Digamos que queremos construir um plugin simples que nos ajude a organizar uma lista de alunos. Na realidade, uma tarefa simples como essa significa que não precisamos usar tabelas personalizadas. Um tipo de postagem personalizado faria o trabalho perfeitamente.

No entanto, para este exemplo, esse tipo de dado é perfeito para demonstrar a teoria por trás das tabelas personalizadas, então vamos usá-lo. Nota: Vamos supor que você possua algum conhecimento básico de PHP e mySQL.

Começando

Para começar, criaremos uma tabela de banco de dados 'aluno' com colunas para nome, idade, email e um ID exclusivo. Vamos fazer isso criando um plugin personalizado para fazer o trabalho.

NOTA: Se você ainda não estiver familiarizado com a forma de criar um plug-in personalizado, confira nosso guia sobre como criar seu próprio plug-in personalizado do WordPress antes de retomar este tutorial!

Crie os arquivos de plug-in

Vamos criar uma pasta chamada “my-custom-db-tables” na pasta plugins e dentro dela, um arquivo chamado “my-custom-db-tables.php” que contém este pedaço de código:

 <?php /* Plugin Name: My Custom DB Tables Description: A plugin for registering my students Author: Tassos Antoniou */ function create_the_custom_table() { // THE CODE } register_activation_hook(__FILE__, 'create_the_custom_table');

O que fizemos foi introduzir as informações do plugin para que o WordPress reconheça o plugin. Obviamente, você também precisará de uma função que adicione o esquema da tabela ao banco de dados que será a função create_the_custom_table() .

Na maioria dos casos, você só precisa executar esta função uma vez, de preferência quando o plugin estiver ativado. Portanto, usamos o register_activation_hook() que o WordPress fornece para garantir que a função seja executada na ativação do plugin.

Definir a estrutura da tabela

Claro, nada acontecerá se ativarmos o plugin, pois a função ainda está vazia. Então vamos preenchê-lo com este código, para realmente criar a tabela:

 <?php /* Plugin Name: My Custom DB Tables Description: A plugin for registering my students Author: Tassos Antoniou */ function create_the_custom_table() { global $wpdb; $charset_collate = $wpdb->get_charset_collate(); $table_name = $wpdb->prefix . 'students'; $sql = "CREATE TABLE " . $table_name . " ( id int(11) NOT NULL AUTO_INCREMENT, name tinytext NOT NULL, email VARCHAR(100) NOT NULL, age int(11) NULL, PRIMARY KEY (id) ) $charset_collate;"; require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); dbDelta($sql); } register_activation_hook(__FILE__, 'create_the_custom_table');

Agora vamos fazer uma pausa para examinar o que fizemos com este pedaço de código.

Em primeiro lugar, pegamos o prefixo da tabela usando a classe global $wpdb WordPress que se comunica com o banco de dados. É o mesmo prefixo definido no arquivo wp-config.php e é uma boa prática usá-lo também em sua tabela personalizada. Também herdaremos o agrupamento atual salvando-o na variável $charset_collate para defini-lo posteriormente na consulta.

Nosso próximo passo é definir a estrutura da tabela na consulta sql para obter o esquema desejado correto. Como dissemos, uma coluna de id, email, nome e idade com o tipo certo de dados para cada um.

 $sql = "CREATE TABLE " . $table_name . " ( id int(11) NOT NULL AUTO_INCREMENT, name tinytext NOT NULL, email VARCHAR(100) NOT NULL, age int(11) NULL, PRIMARY KEY (id) ) $charset_collate;";

Em seguida, nós require_once o arquivo upgrade.php . Isso é obrigatório para usar a função dbDelta que vem logo depois. Quando no WordPress, para criar uma tabela de banco de dados (ou atualizar as tabelas existentes para uma nova estrutura), precisamos usar a função dbDelta.

NOTA: Em vez de executar diretamente uma consulta SQL, esta função é usada para modificar o banco de dados criando ou atualizando uma tabela, com base em instruções SQL especificadas. Usando seu parâmetro $queries , podemos passar o esquema da nossa tabela customizada.

Agora, se você ativar o plugin e verificar seu banco de dados, deverá ver que a tabela foi criada.

Agora, se você ler dentro do arquivo wp-admin/includes/upgrade.php , você notará que dbDelta() usa a função preg_match() para recuperar informações da instrução SQL. Por isso, você precisa ter cuidado ao editá-lo. A documentação oficial fornece mais informações sobre isso, mas destacamos os pontos principais abaixo:

  • Você deve colocar cada campo em sua própria linha em sua instrução SQL.
  • Você deve ter dois espaços entre as palavras PRIMARY KEY e a definição de sua chave primária.
  • Você deve usar a palavra-chave KEY em vez de seu sinônimo INDEX e deve incluir pelo menos uma KEY.
  • KEY deve ser seguido por um único espaço , depois pelo nome da chave, depois por um espaço, depois por um parêntese aberto com o nome do campo e por um parêntese fechado.
  • Outras KEYs além da primária devem receber um nome. Por exemplo:
 ... PRIMARY KEY (id), KEY age (age) ...
  • Você não deve usar apóstrofos ou acentos graves em torno dos nomes dos campos.
  • Os tipos de campo devem ser todos em minúsculas .
  • Palavras-chave SQL, como CREATE TABLE e UPDATE, devem ser maiúsculas .
  • Você deve especificar o comprimento de todos os campos que aceitam um parâmetro de comprimento, como int(11) da coluna id, por exemplo.

Você também deve ter notado que não verificamos se a tabela já existe no banco de dados. Isso porque o dbDelta faz isso por nós. Não há necessidade de se preocupar com consultas de atualização. Ele não apenas criará a tabela, mas verificará se já existe uma tabela com o mesmo nome e, em caso afirmativo, não criará a tabela. Ele só atualizará a estrutura da tabela existente se necessário.

Abordaremos isso mais em artigos futuros da série.

Funcionalidade e escalabilidade

Então, o que deve acontecer quando o plugin é desativado ou desinstalado? Idealmente, deve haver uma opção de administrador para escolher se deseja excluir esta tabela ou não do banco de dados se e quando o plug-in for desativado ou excluído.

Além disso, você quase certamente descobrirá mais cedo ou mais tarde que precisa alterar seu plugin (para melhorá-lo ou resolver um bug). Talvez você queira alterar a maneira como armazena os dados, adicionar colunas à tabela ou alterar seu design. Isso significa que você deve construir o plug-in de forma a garantir que ele seja o mais escalável possível e possa se adaptar a quaisquer alterações feitas.

Em nossos próximos artigos desta série, vamos nos aprofundar nesses tópicos e mostrar como você pode fazer isso. Verifique em breve!