Revisé muchos subprocesos, página de codex e intenté jugar con muchas cosas, pero mi código no parece estar creando las tablas. Y no soy capaz de averiguar dónde me estoy equivocando. Verifiqué booking_db_version en la base de datos, se actualiza cuando lo actualizo en el archivo.
Aquí está el 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');
fuente
CREATE TABLE
hará que falle.PRIMARY KEY (id),
. dbDelta en realidad dice que crea la tabla a pesar de que no lo hacePRIMARY KEY (id),
es un problema de SQL, no dbDelta ni un problema de WP. Por lo tanto, no hay documentación.dbDelta()
usted, puede pasar sus SQL como una matriz endbDelta
lugar de llamardbDelta
individualmente para cada consulta.Puedes probar esta función :
fuente
El uso de 'CREAR TABLA' en lugar de 'crear tabla' me resolvió el problema.
fuente
Además de todos esos puntos importantes, debe activar el gancho de activación.
Mientras desarrollaste tu plugin y escribiste el código correcto, aún necesitas reactivar tu plugin para activar el enlace, por lo que tu tabla se creará cuando se active el plugin.
fuente
Las palabras clave de SQL, como CREATE TABLE y UPDATE, deben estar en mayúsculas. así que cambie la línea de crear tabla a:
y
a:
o esto:
a:
y así
fuente
CREATE TABLE
,CREATE DATABASE
,INSERT INTO
, yUPDATE
. Todo lo demás no se usa en una comparación entre mayúsculas y minúsculas o se convierte a minúsculas . Tus sugerencias no tienen efecto.