広告

WordPressでデータベースのテーブルを作成

この記事は約3分で読めます。

WordPressでデータベースにテーブルを作成する機会があり、沼にハマってなかなか抜け出せなかったので、残しておきます。

結論 $wpdbを使ってテーブルを作る

まずは、結論のコードから

global $wpdb;

// dbDeltaの利用の為、読み込み
require_once ABSPATH . 'wp-admin/includes/upgrade.php';

// データベーステーブル名を指定
$table_name = $wpdb->prefix . 'table-name';

// 文字コード取得
$charset_collate = $wpdb->get_charset_collate();

// CREATE文
$create_table = "CREATE TABLE $table_name(
	ID bigint(20) unsigned NOT NULL auto_increment,
	created_at datetime NOT NULL default '0000-00-00 00:00:00',
	updated_at datetime NOT NULL default '0000-00-00 00:00:00',
	name text,
	email text,
	subject text,
	content longtext,
	PRIMARY KEY  (ID)
	) $charset_collate;\n";

// テーブル作成
$create_retrun = dbDelta( $create_table );

テーブルの存在確認をするなら(こっちの方がおすすめ)

global $wpdb;

// dbDeltaの利用の為、読み込み
require_once ABSPATH . 'wp-admin/includes/upgrade.php';

// データベーステーブル名を指定
$table_name = $wpdb->prefix . 'table-name';

// 文字コード取得
$charset_collate = $wpdb->get_charset_collate();

// CREATE文
$create_table = "CREATE TABLE $table_name(
	ID bigint(20) unsigned NOT NULL auto_increment,
	created_at datetime NOT NULL default '0000-00-00 00:00:00',
	updated_at datetime NOT NULL default '0000-00-00 00:00:00',
	name text,
	email text,
	subject text,
	content longtext,
	PRIMARY KEY  (ID)
	) $charset_collate;\n";

if ( $wpdb->get_var( $wpdb->prepare( 'SHOW TABLES LIKE %s', $table_name ) ) !== $table_name ) {
	echo 'データベースのテーブルが存在しない';
	$create_retrun = dbDelta( $create_table );
} else {
	echo 'データベースのテーブルが存在';
}

これで上手くいきました。

ポイント

global $wpdb; で、$wpdbを使えるようにします。

データベースのテーブルを作成するときに使うdbDeltaは、ファイルを呼び出す必要があります。

CREATE文を作成するときは、wp-admin/includes/schema.php を参考にしましょう。

テーブルがあるのにdbDeltaを使ったらどうなる?

下記のようなエラーが出力されて、新たなテーブルは作成されません。

WordPress データベースエラー: [Table 'wp_*********' already exists]