基本的なコード例
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
global $wpdb; // dbDelta() を使うために必須 require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); $table_name = $wpdb->prefix . 'my_custom_table'; $charset_collate = $wpdb->get_charset_collate(); $sql = "CREATE TABLE {$table_name} ( id bigint(20) NOT NULL AUTO_INCREMENT, user_id bigint(20) NOT NULL, title varchar(255) NOT NULL, content longtext NOT NULL, created_at datetime DEFAULT '0000-00-00 00:00:00' NOT NULL, PRIMARY KEY (id), KEY user_id (user_id) ) {$charset_collate};"; dbDelta( $sql ); |
⚠️ 守らないと動かない厳格なルール
① CREATE TABLE と テーブル名の間にスペース2つ
|
1 2 3 4 5 |
-- ✅ 正しい(スペース2つ) CREATE TABLE wp_my_table ( -- ❌ NG(スペース1つ) CREATE TABLE wp_my_table( |
② 各フィールド定義は1行ずつ
|
1 2 3 4 5 6 |
-- ✅ 正しい(1フィールド1行) id bigint(20) NOT NULL AUTO_INCREMENT, title varchar(255) NOT NULL, -- ❌ NG(複数フィールドを同じ行に書かない) id bigint(20) NOT NULL AUTO_INCREMENT, title varchar(255) NOT NULL, |
③ PRIMARY KEY の後ろはスペース2つ
|
1 2 3 4 5 |
-- ✅ 正しい(スペース2つ) PRIMARY KEY (id), -- ❌ NG(スペース1つ) PRIMARY KEY (id), |
④ インデックスは KEY で指定する
|
1 |
KEY user_id (user_id) |
⑤ SQLの末尾に ; をつける
|
1 |
) {$charset_collate}; |
⑥ require_once で upgrade.php を読み込む(必須)
|
1 |
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); |
プラグインの有効化フックと組み合わせる場合
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
register_activation_hook( __FILE__, 'my_plugin_create_table' ); function my_plugin_create_table() { global $wpdb; require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); $table_name = $wpdb->prefix . 'my_custom_table'; $charset_collate = $wpdb->get_charset_collate(); $sql = "CREATE TABLE {$table_name} ( id bigint(20) NOT NULL AUTO_INCREMENT, user_id bigint(20) NOT NULL, title varchar(255) NOT NULL, created_at datetime DEFAULT '0000-00-00 00:00:00' NOT NULL, PRIMARY KEY (id) ) {$charset_collate};"; dbDelta( $sql ); } |
まとめ:よくあるミス一覧
| ミス | 正しい書き方 |
|---|---|
PRIMARY KEY (id) | PRIMARY KEY (id)(スペース2つ) |
upgrade.php の読み込み忘れ | require_once(...) を必ず記述 |
| フィールドを複数行にまとめる | 1フィールド1行 |
| 文字コード未指定 | $wpdb->get_charset_collate() を使う |
SQL末尾の ; 忘れ | 必ず ; で終わらせる |
コメント