前回の投稿ではプラグインのインストール時に特定のメソッドを呼ぶ方法を書きました。
それを踏まえて、今回はプラグインのインストール時にデータベース内に、簡単なテーブルを作成することをやってみます。
まずは、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;