Saya telah melalui banyak utas, halaman codex dan mencoba mengacaukan banyak hal tetapi kode saya sepertinya tidak membuat tabel. Dan saya tidak bisa mencari tahu di mana saya salah. Saya memeriksa booking_db_version dalam database, ini akan diperbarui ketika saya memperbaruinya dalam file.
Ini kodenya
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');
sumber
CREATE TABLE
akan menyebabkan kegagalan.PRIMARY KEY (id),
. dbDelta sebenarnya mengatakan bahwa ia menciptakan tabel meskipun tidakPRIMARY KEY (id),
adalah masalah SQL, bukan dbDelta atau masalah WP. Karenanya tidak ada dokumentasi.dbDelta()
Anda, Anda dapat meneruskan SQL sebagai arraydbDelta
alih-alih memanggil satudbDelta
per satu untuk setiap kueri.Anda dapat mencoba fungsi ini :
sumber
Menggunakan 'CREATE TABLE' alih-alih 'create table' memecahkan masalah bagi saya.
sumber
Selain semua poin penting itu, Anda harus memicu kait aktivasi.
Saat Anda mengembangkan plugin dan menulis kode yang benar, Anda masih perlu mengaktifkan kembali plugin Anda untuk memicu hook, sehingga tabel Anda akan dibuat ketika plugin diaktifkan.
sumber
Kata kunci SQL, seperti CREATE TABLE dan UPDATE, harus huruf besar. jadi ganti baris buat tabel ke:
dan
untuk:
atau ini:
untuk:
dan seterusnya
sumber
CREATE TABLE
,CREATE DATABASE
,INSERT INTO
, danUPDATE
. Segala sesuatu yang lain tidak digunakan dalam perbandingan case-sensitive atau dikonversi ke huruf kecil . Saran Anda tidak berpengaruh.