J'ai parcouru beaucoup de threads, page de codex et essayé de jouer avec beaucoup de choses mais mon code ne semble pas créer les tables. Et je ne peux pas comprendre où je me trompe. J'ai vérifié booking_db_version dans la base de données, il est mis à jour lorsque je le mets à jour dans le fichier.
Voici le code
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');
la source
CREATE TABLE
entraînerait son échec.PRIMARY KEY (id),
. dbDelta dit en fait qu'il crée la table même si ce n'est pas le casPRIMARY KEY (id),
est un problème SQL, pas dbDelta ni un problème WP. Par conséquent, aucune documentation.dbDelta()
vous pouvez transmettre vos SQL sous forme de tableau àdbDelta
au lieu d'appelerdbDelta
individuellement pour chaque requête.Vous pouvez essayer cette fonction :
la source
L'utilisation de 'CREATE TABLE' au lieu de 'create table' a résolu le problème pour moi.
la source
Outre tous ces points importants, vous devez déclencher le crochet d'activation.
Pendant que vous avez développé votre plugin et écrit le code correct, vous devez toujours réactiver votre plugin pour déclencher le hook, donc votre table sera créée lorsque le plugin sera activé.
la source
Les mots clés SQL, comme CREATE TABLE et UPDATE, doivent être en majuscules. changez donc la ligne de la table de création en:
et
à:
ou ca:
à:
etc
la source
CREATE TABLE
,CREATE DATABASE
,INSERT INTO
etUPDATE
. Tout le reste n'est pas utilisé dans une comparaison sensible à la casse ou converti en minuscules . Vos suggestions n'ont aucun effet.