前回の投稿ではプラグインのインストール時に特定のメソッドを呼ぶ方法を書きました。
それを踏まえて、今回はプラグインのインストール時にデータベース内に、簡単なテーブルを作成することをやってみます。
まずは、myplugin_activateメソッドが呼ばれた時に(インストールされた時に)、テーブル作成するSQL(DDL文)を呼びます。
function myplugin_activate() { //テーブル作成などなど self::create_tables_sample_mst(); }
メソッド名に特に決まりはなく、任意の名前のものを書きます。
次に、呼ばれる側のメソッドを書きます。
function create_tables_sample_mst() { //ここでテーブル作成を行う }
これで、インストール時にcreate_tables_sample_mstメソッドが呼ばれて
テーブル作成などができるようになります。
では、実際に、create_tables_sample_mstメソッド内にテーブル作成のSQLを書いてみます。
function create_tables_sample_mst() { global $wpdb; $charset_collate = ""; //接頭辞の追加(socal_count_cache) $table_name = $wpdb->prefix . 'sample_mst'; //charsetを指定する if (!empty($wpdb->charset)) { $charset_collate = "DEFAULT CHARACTER SET {$wpdb->charset} "; } //照合順序を指定する(ある場合、通常デフォルトのutf8_general_ci) if (!empty($wpdb->collate)) { $charset_collate .= "COLLATE {$wpdb->collate}"; } $sql = <<< EOL CREATE TABLE {$table_name} ( id INT NOT NULL AUTO_INCREMENT, sample_name VARCHAR(128), create_date DATETIME, PRIMARY KEY(id) ) {$charset_collate}; EOL; //dbDeltaを実行する為に必要 require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); dbDelta($sql); }
コードを一つづつ追うとわかるのですが、まず、
global $wpdb;
で、wordpress内のデータベースにアクセスする為のクラスを読み込んでいます。
$wpdbはSQLの実行時にいたるところで使うので、この読み込み方はよく覚えておくといいと思います。
作成するテーブル名称は「wp_sample_mst」となります。
wp_というのはwordpressに関するテーブルの接頭辞(接頭句?)になり、よほどのことがない限り、
この「wp_」という名称に従ったほうがよいと思います。
その次に、charset
//charsetを指定する if (!empty($wpdb->charset)) { $charset_collate = "DEFAULT CHARACTER SET {$wpdb->charset} "; }
と照合順序を
//照合順序を指定する(ある場合、通常デフォルトのutf8_general_ci) if (!empty($wpdb->collate)) { $charset_collate .= "COLLATE {$wpdb->collate}"; }
それぞれセットして、テーブル作成文を実行します。
実際にプラグインのインストールを試して、テーブルが作成されることを確認します。
最後に、少し長くなりますが、ソースコード全体を書いておきます。
<?php /* Plugin Name: SamplePlugin1 Plugin URI: http:// Description: サンプルプラグイン。 Version: 1.0 Author: sample Author URI: http:// License: GPL2 License URI: https://www.gnu.org/licenses/gpl-2.0.html */ register_activation_hook(__FILE__, array('SamplePlugin1', 'myplugin_activate')); register_deactivation_hook(__FILE__, array('SamplePlugin1', 'myplugin_unactivate')); register_uninstall_hook(__FILE__, array('SamplePlugin1', 'myplugin_uninstall')); class SamplePlugin1 { function __construct() { add_action('admin_menu', array($this, 'add_pages')); } function add_pages() { add_menu_page( 'SamplePlugin1 Plugin Settings', 'SamplePlugin1', 'manage_options', 'SamplePluginMenu', array($this, 'sample_plugin') ); } function myplugin_activate() { //テーブル作成などなど self::create_tables_sample_mst(); } function myplugin_unactivate() { //テーブルデータ消去などなど } function myplugin_uninstall() { //テーブル削除などなど } function create_tables_sample_mst() { global $wpdb; $charset_collate = ""; //接頭辞の追加(socal_count_cache) $table_name = $wpdb->prefix . 'sample_mst'; //charsetを指定する if (!empty($wpdb->charset)) { $charset_collate = "DEFAULT CHARACTER SET {$wpdb->charset} "; } //照合順序を指定する(ある場合、通常デフォルトのutf8_general_ci) if (!empty($wpdb->collate)) { $charset_collate .= "COLLATE {$wpdb->collate}"; } $sql = <<< EOL CREATE TABLE {$table_name} ( id INT NOT NULL AUTO_INCREMENT, sample_name VARCHAR(128), create_date DATETIME, PRIMARY KEY(id) ) {$charset_collate}; EOL; //dbDeltaを実行する為に必要 require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); dbDelta($sql); } } new SamplePlugin1;