Przeszedłem przez wiele wątków, strony kodeksu i próbowałem zadzierać z wieloma rzeczami, ale mój kod prawdopodobnie nie tworzy tabel. I nie jestem w stanie zrozumieć, gdzie się mylę. W bazie danych zaznaczyłem booking_db_version, jest aktualizowany, kiedy aktualizuję go w pliku.
Oto kod
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');
źródło
CREATE TABLE
spowoduje, że się nie powiedzie.PRIMARY KEY (id),
. dbDelta faktycznie mówi, że tworzy tabelę, chociaż tak nie jestPRIMARY KEY (id),
to problem SQL, a nie dbDelta ani problem WP. Stąd brak dokumentacji.dbDelta()
możesz przekazać swoje SQL jako tablicędbDelta
zamiast wywoływaćdbDelta
indywidualnie dla każdego zapytania.Możesz wypróbować tę funkcję :
źródło
Użycie polecenia „UTWÓRZ TABELĘ” zamiast „Utwórz tabelę” rozwiązało problem.
źródło
Oprócz tych wszystkich ważnych punktów, powinieneś aktywować hak aktywacyjny.
Podczas gdy opracowałeś wtyczkę i napisałeś poprawny kod, nadal musisz ponownie aktywować wtyczkę, aby wywołać zaczep, więc twoja tabela zostanie utworzona po aktywacji wtyczki.
źródło
Słowa kluczowe SQL, takie jak CREATE TABLE i UPDATE, muszą być pisane wielkimi literami. więc zmień linię tworzenia tabeli na:
i
do:
albo to:
do:
i tak dalej
źródło
CREATE TABLE
,CREATE DATABASE
,INSERT INTO
, iUPDATE
. Cała reszta nie jest używana w porównaniu wielkości liter lub jest konwertowana na małe litery . Twoje sugestie nie działają.