プラグインインストールと同時にテーブルを作成する

WordPress

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

まずは、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;

コメントを残す

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