今回は、WordPressのデータベースに fow_oh_helpbodyテーブルを作成します。
テーブルは全部で3つ必要ですが、まず1つだけで試してみて、正常にテーブルを作成できるか確認します(今回はまだ確認しません)。
onlinehelp_db.php の作成
データベースを直接扱うコードを、onlinehelp_db.php ファイルにまとめます。プラグインのフォルダー(fow-online-help)に、onlinehelp_db.php
を作成してください。
fow_install_tables関数の作成
fow_install_tables
関数を onlinehelp_db.php に記述します。内容は以下のとおりです。
<?php
/**
* DB操作ライブラリー
*/
/**
* WordPressのデータベースにテーブルを登録する
*/
function fow_install_tables()
{
global $wpdb;
global $fow_online_help_db_version;
$charset_collate = $wpdb->get_charset_collate();
// fow_oh_helpbodyテーブルの登録
$table = $wpdb->prefix . FOW_OH_TABLES['helpbody'];
$sql =
"CREATE TABLE $table (
help_id int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
title varchar(50) NOT NULL DEFAULT '',
helpbody text NOT NULL,
tags varchar(255) NOT NULL DEFAULT '',
relations varchar(255) NOT NULL DEFAULT '',
product_id int(11) UNSIGNED NOT NULL DEFAULT '0',
category_id int(11) UNSIGNED NOT NULL DEFAULT '0',
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (help_id),
KEY tags (tags),
KEY product_id (product_id),
KEY category_id (category_id)
) $charset_collate;";
require_once ABSPATH . 'wp-admin/includes/upgrade.php';
dbDelta($sql);
// データベースバージョンの登録
add_option(FOW_OH_OPTION_DB_VERSION, $fow_online_help_db_version);
}
(12-13行目)
WordPressのデータベースには、$wpdb
グローバル変数でアクセスできます。$wpdb
については、ページ末尾のリンク先を参照してください。関数内で使用するために宣言しています。
$fow_online_help_db_version
はテーブルのバージョンを入れています。ここでバージョンをチェックして、バージョンが変わっていればテーブルをアップグレードさせることになります。なお、今回はバージョンのチェック処理を省いています(次回で入れる予定です)。
(15行目)
デフォルト文字セットと照合順序を取得します。テーブルを作成する際、文字セットと照合順序を指定するために使用します。これを省くと、文字列をテーブルに保存する際、照合順序などが違うものに変換されてしまう可能性があります。
(18行目)
WordPressのテーブルにはwp_
といったプレフィックスが付きます。プレフィックスはサイトなどによってまちまちです。プレフィックスを取得するには$wpdb->prefix
を使用します。
プレフィックスを付けたテーブル名を$table
変数に代入しています。もし、プレフィックスがwp_
であれば、実際に作成されるテーブルの名前はwp_fow_oh_helpbody
となります。
(20-35行目)
テーブル作成のSQL文を、$sql
変数に代入しています。
テーブルの作成はdbDelta
関数で行います。dbDelta関数は便利で、テーブルが存在しないときはそのテーブルを作成します。テーブルがすでに存在するときは、既存テーブル構造と比較し、異なっていれば既存テーブルの構造を変更してくれます。
ただし、dbDelta関数に渡すSQL文は、以下のルールで記述する必要があります(テーブルの作成についての情報は、記事末尾のリンク先を参考にしてください)。
- 1行に1つのフィールドを定義する
- PRIMARY KEY というキーワードと、そのフィールド名とは、2個のスペースで区切る
- インデックスを指定するのに INDEX というキーワードは使用できない。代わりに KEY を使用する
- フィールド名をアポストロフィー(
'
)やバッククォート(`
)で囲んではいけない - フィールドのデータ型はすべて小文字で書く
- SQLのキーワードはすべて大文字で書く
- 長さを受け付けるデータ型は、必ず長さを指定する
21行目から35行目まで、改行を入れた1つの文字列であることに注意してください。文字列をダブルクォーテーション("
)で囲っているので、文字列内の $table、$charset_collate は変数の中身に置き換えられます。
(37-38行目)
dbDelta関数を実行します。dbDelta関数は (WordPressのルート)/wp-admin/includes/upgrage.php
で定義されています。自動的にインクルードされないので、ここでインクルードします。
ABSPATH
定数はWordPressで使用できる定数で、WordPressがインストールされているディレクトリーパス(イコール、WordPressのルートフォルダー)を表します。
(41行目)
add_option
関数は、WordPressに新規オプションを登録する関数です。テーブルのバージョン番号を新規オプションとして、WordPressに登録しています。
参考リンク
環境によっては、このテーブル構造だとエラーが発生し、テーブルを作成できないことがあります。
その場合、29行目を以下のように変更してください。
created_at datetime NULL DEFAULT NULL,