ようこそのお運びで、厚く御礼申し上げます。
59日目です。今回はデータベースにテーブルを作成します。
プラグインをインストール時に、データベースに新しくテーブルを作成(create table)する。
自作プラグインをインストールするときに、データベースに新しくテーブルを作成する。
今回は、既存のものとは別にあたらしいテーブルを作成する。
今まで、プラグインを作成した際、データの保存は既存のテーブルに保存していましたが、今回は新しくテーブルを作成してみようと思います。
※新しくテーブルを作成することで、自作プラグインが保存場所を独立してにもつことができ、保存、集計等色々自由がききそうです。
まずは一歩、今回の仕様は。
少しずつ作っていこうと思いますので今回は、
- プラグインのインストール時に、テーブルを作成
- 初期データを挿入する。
これでいきます。
プラグインのインストール時に実行する方法は、以下のページを参照してください
また、WordPressのデータベースのテーブル作成については以下のページを参照してください。
「WordPress Codex 日本語版:Creating Tables with Plugins」
プラグインファイルを作成していきます。
では、function.phpに以下のコードを書きました。
prefix)を付けてテーブル名を設定 $this->table_name = $wpdb->prefix . 'paka3Table'; register_activation_hook (__FILE__, array($this,'paka3_plugin_start')); } } //プラグインを有効化したとき(インストール) public function paka3_plugin_start(){ global $wpdb; global $jal_db_version; if($wpdb->get_var("SHOW TABLES LIKE '$this->table_name'") != $this->table_name) { $sql = "CREATE TABLE " . $this->table_name . " ( id mediumint(9) NOT NULL AUTO_INCREMENT, created datetime DEFAULT NULL, modified datetime DEFAULT NULL, title tinytext NOT NULL, contents text NOT NULL, UNIQUE KEY id (id) );"; require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); dbDelta($sql); $this->paka3_FirstData(); add_option("paka3_db_version", $this->paka3_db_version); } } //初期データのインストール public function paka3_FirstData(){ global $wpdb; $title = $wpdb->escape("初めての投稿です"); $contents = $wpdb->escape("インストールが完了しました"); $wpdb->insert( $this->table_name, array( 'title' => $title, 'contents' => $contents ),array( '%s', '%s' )); } } ?>
ポイントはどこ?
- プラグインのインストール時に関数実行するには「register_activation_hook」を使用します。
※WordPress Codex 日本語版:register_activation_hookpublic function __construct(){ global $wpdb; if(function_exists('register_activation_hook')) { // 接頭辞($wpdb->prefix)を付けてテーブル名を設定 $this->table_name = $wpdb->prefix . 'paka3Table'; register_activation_hook (__FILE__, array($this,'paka3_plugin_start')); } }
- データベースに作成するテーブルが既にないかチェックを行います。
if($wpdb->get_var("SHOW TABLES LIKE '$this->table_name'") != $this->table_name) { ... }
- SQL文:「CREATE TABLE」を使ってテーブルを作成します。
$sql = "CREATE TABLE " . $this->table_name . " ( id mediumint(9) NOT NULL AUTO_INCREMENT, created datetime DEFAULT NULL, modified datetime DEFAULT NULL, title tinytext NOT NULL, contents text NOT NULL, UNIQUE KEY id (id) );";
- Codexに書いていますが、テーブルを作成するときは、直接SQLクエリを実行するよりdbDelta関数を使いましょう。
「現在のテーブル構造を走査し、作成予定のテーブルと比較、必要に応じてテーブルを追加・修正します。更新にはとても便利な関数」だそうです。※ただし、若干制約があり。//※データベースにテーブルがないか確認 if($wpdb->get_var("SHOW TABLES LIKE '$this->table_name'") != $this->table_name) { //##テーブルを作成する $sql = "SQL文"; //dbDeltaを使ってSQLを実行 require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); dbDelta($sql); //*初期データが必要なら呼び出し //バージョンオプション add_option("jal_db_version", $this->jal_db_version); }
- 初期データはテーブルを作成したら$wpdbを使って新しくレコードを作成します(関数paka3_FirstData ()参照)
コードをプラグイン用のファイルにします
それではfunction.phpに書いたコードを消して、
「Paka3_DatabaseTable.php」というファイルを作成し、以下のコードを記入します。
このファイルを[wp-content]>「plugins」ディレクトリに入れ、管理画面で有効にして完了です。
今回のまとめ
今回はデータを扱うプラグイン作成の第一弾として、データベースのテーブルを作成してみました。今まで色々してきた部分の応用も出てきますが、WordPressでどこまでできるのか試してみようと思います。