A maneira correta de fazer isso hoje em dia é incluir o esquema como um arquivo na fonte do plug-in e usar a função embutida do WordPress dbDelta () para atualizar o banco de dados conforme necessário usando esse esquema. O código real necessário é muito simples:
$sql = file_get_contents( plugin_dir_path(__FILE__) . "/schema.sql" );
dbDelta( $sql );
Isso criará e atualizará o banco de dados para você, conforme necessário. Quando eu verifiquei pela última vez, ele não excluiu colunas antigas não utilizadas; portanto, você precisará codificá-lo por meio de uma verificação de versão. Este é um belo recurso do WordPress e economiza bastante tempo. Cuidado ao criar o arquivo schema.sql ao copiar o espaçamento em uma exportação de esquema mysql exatamente como o código dbDelta () tem a reputação de ser muito exigente quanto ao espaçamento. Você também deve testar a versão do banco de dados e, se não for a mais recente, chame o acima para atualizar o banco de dados. Você também pode precisar fazer atualizações específicas para cobrir alterações que o dbDelta () não acerta (por exemplo, excluindo uma coluna). É fácil escrever um teste lógico simples para verificar se a versão foi atualizada e fazer essas atualizações manuais via $ wpdb. Por exemplo, você pode soltar uma coluna que agora não está sendo usada.
$installed_ver = get_option(MY_DB_VERSION);
$wpp = $wpdb->prefix . "mypluginname";
if ($installed_ver < 102)
$wpdb->query("ALTER TABLE ${wpp}_movies DROP nft_date");
if ($installed_ver < 107)
$wpdb->query("ALTER TABLE ${wpp}_movies CHANGE lastupdated "
. "lastupdated TIMESTAMP on update CURRENT_TIMESTAMP "
. "NOT NULL DEFAULT CURRENT_TIMESTAMP");
update_option(MY_DB_VERSION, $db_version);
Isso é simplificado da execução do código, desculpas se eu o tiver quebrado no processo de simplificação para publicação.
Também tenha em mente que, a partir do WordPress 3.9.2, o WordPress nem sempre executa o gancho de ativação ao atualizar o plug-in (especificamente, se uma atualização em massa é feita na página Atualizações do painel).
Em suma, sim a
$wpdb
classe. Veja Codex para mais informações.Sempre que você interagir com uma tabela personalizada (ou qualquer tabela, na verdade), você deve passar por isso
$wpdb
- verifique se você está familiarizado com oprepare
método que pode ajudar a escapar de consultas e evitar injeções.Você já deve estar familiarizado, pois deve usá-lo para criar a tabela. No gancho de instalação, você deve ter algo como:
Na verdade, esse código é executado sempre que o plug-in é ativado (ou seja, não apenas instalado). Portanto, ele será executado quando alguém atualizar o plug-in automaticamente . Nota: Se eles atualizarem substituindo o plug-in manualmente - então não será -, será necessário ativar o código acima
admin_init
quando seu plug-in for atualizado (armazene o número da versão na tabela de opções, verifique a versão atual) .Agora você normalmente não deseja que o
CREATE TABLE
comando SQL esteja em execução toda vez que você atualizar o plug-in - é aqui quedBDelta()
entra.Antes de executar o comando acima - ele verifica se a tabela existe. Além disso, ele verifica os tipos de coluna. Portanto, se a tabela não existir, ela será criada, se existir, mas alguns tipos de coluna foram alterados, ela será atualizada e, se uma coluna não existir - ela será adicionada.
Infelizmente - se você remover uma coluna das opções acima, ela não será removida automaticamente. Para remover colunas / tabelas, é necessário especificá-
DROP
las (verifique se elas existem antes de você).fonte