Eu passei por muitos tópicos, página de codex e tentei mexer com muitas coisas, mas meu código não parece estar criando as tabelas. E não sou capaz de descobrir onde estou errado. Eu verifiquei booking_db_version no banco de dados, ele é atualizado quando eu atualizá-lo no arquivo.
Aqui está o código
global $booking_db_version;
$booking_db_version = "1.0.0";
function booking_install() {
global $wpdb;
global $booking_db_version;
global $tableprefix;
$installed_version = get_option('booking_db_option');
$tableprefix = $wpdb->prefix . 'booking_';
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
if ( $installed_version !== $booking_db_version ) {
/* Create table for packages */
$packagetable = $tableprefix . 'packages';
$sql = "create table $packagetable (
id mediumint(9) NOT NULL AUTO_INCREMENT,
name text NOT NULL,
description text NOT NULL,
city1 text NOT NULL,
city2 text NOT NULL,
PRIMARY KEY (id)
);";
dbDelta($sql);
/* Create table for hotels */
$hoteltable = $tableprefix . 'hotels';
$sql = "create table $hoteltable (
id mediumint(9) NOT NULL AUTO_INCREMENT,
name text NOT NULL,
city text NOT NULL,
price decimal(10,2) NOT NULL,
PRIMARY KEY (id)
);";
dbDelta($sql);
/* Create table for addons */
$addontable = $tableprefix . 'addons';
$sql = "create table $addontable (
id mediumint(9) NOT NULL AUTO_INCREMENT,
name text NOT NULL,
addongroup text NOT NULL,
price decimal(10,2) NOT NULL,
PRIMARY KEY (id)
);";
dbDelta($sql);
/* Create table for addon groups */
$addongrouptable = $tableprefix . 'addon_groups';
$sql = "create table $addongrouptable (
id mediumint(9) NOT NULL AUTO_INCREMENT,
name text NOT NULL,
perhead text NOT NULL,
PRIMARY KEY (id)
);";
dbDelta($sql);
update_option('booking_db_version', $booking_db_version);
}
}
register_activation_hook(__FILE__, 'booking_install');
fonte
CREATE TABLE
fará com que ele falhe.PRIMARY KEY (id),
. dbDelta realmente diz que ele cria a mesa, embora isso não acontecePRIMARY KEY (id),
é um problema de SQL, não dbDelta nem um problema de WP. Portanto, não há documentação.dbDelta()
você pode passar seus SQLs como uma matriz para, emdbDelta
vez de chamardbDelta
individualmente para cada consulta.Você pode tentar esta função :
fonte
Usar 'CREATE TABLE' em vez de 'create table' resolveu o problema para mim.
fonte
Além de todos esses pontos importantes, você deve ativar o gancho de ativação.
Enquanto você desenvolveu seu plug-in e escreveu o código correto, ainda precisa reativar seu plug - in para acionar o gancho, para que sua tabela seja criada quando o plug-in for ativado.
fonte
Palavras-chave SQL, como CREATE TABLE e UPDATE, devem estar em maiúsculas. então mude a linha da tabela de criação para:
e
para:
ou isto:
para:
e assim por diante
fonte
CREATE TABLE
,CREATE DATABASE
,INSERT INTO
eUPDATE
. Todo o resto não é usado em uma comparação com distinção entre maiúsculas e minúsculas ou convertido em minúsculas . Suas sugestões não têm efeito.