テーブルの作成(テーブルの作成) – WordPressプラグインの開発 6

投稿者: | 2018年1月20日

今回は、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に登録しています。

参考リンク

 

テーブルの作成(テーブルの作成) – WordPressプラグインの開発 6」への1件のフィードバック

  1. kino_3240 投稿作成者

    環境によっては、このテーブル構造だとエラーが発生し、テーブルを作成できないことがあります。
    その場合、29行目を以下のように変更してください。

    created_at datetime NULL DEFAULT NULL,

    返信

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)