今まで作成した内容をクラス化します。
プラグインをクラス化するメリットは、他のプラグインやテーマなどと、関数名などの重複を避けやすい点です。
このオンラインヘルプでは関数名などの先頭に fow_
といったプレフィックスを付けています。これでもある程度、重複を避ける効果があるでしょう。しかし、関数が増えてくると、get_data
のようなありきたりの関数名を、つい付けてしまうこともあります。あるいは、fow_get_data
のようにしても、この程度の単純な関数名であれば、重複する可能性があります。
クラス化すると、クラスの名前と、そのクラスのインスタンスを入れる変数名の重複を気をつけていればよくなります。
ライブラリークラスの作成
まず、ライブラリーとして機能するクラスを作成します。要は、いろいろな関数や定数を入れておくクラスで、必要に応じてプラグインの本体から利用するクラスです。
ライブラリークラスは、onlinehelp_consts.php
に記述します。以下のように修正します。
<?php
/**
* ライブラリークラス
*/
class Fow_OnlineHelp_Lib
{
/**
* DB関連
*/
// バージョン
public $fow_online_help_db_version = '1.0.2';
// テーブル名
const FOW_OH_TABLES = array(
'helpbody' => 'fow_oh_helpbody',
'product' => 'fow_oh_product',
'category' => 'fow_oh_category',
);
/**
* オプション関連
*/
const FOW_OH_OPTION_DB_VERSION = 'fow_oh_db_version';
}
クラス名は Fow_OnlineHelp_Lib
としています(6行目)。
データベースのバージョンを示す $fow_online_help_db_version
は、public
のフィールドにします(13行目)。バージョン番号を 1.0.2
に変更しておきましょう(動作確認のため)。$fow_online_help_db_version
はクラスのフィールドになったため、
global $fow_online_help_db_version; // この行は削除
の行は削除しました。
データベース操作クラスの作成
データベースを操作する関数を、データベース操作用のクラスにまとめます。クラスの名前は Fow_OnlineHelp_DB
にします。onlinehelp_db.php
を以下のように修正します。
<?php
/**
* DB操作クラス
*/
class Fow_OnlineHelp_DB
{
/**
* データベースにテーブルを登録する
*/
public function install_tables()
{
global $wpdb;
global $onlinehelp_lib;
if ($onlinehelp_lib->fow_online_help_db_version !== get_option(Fow_OnlineHelp_Lib::FOW_OH_OPTION_DB_VERSION, '')) {
$charset_collate = $wpdb->get_charset_collate();
// fow_oh_helpbodyテーブルの登録
$table = $wpdb->prefix . Fow_OnlineHelp_Lib::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);
// fow_oh_productテーブルの登録
$table = $wpdb->prefix . Fow_OnlineHelp_Lib::FOW_OH_TABLES['product'];
$sql =
"CREATE TABLE $table (
product_id int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
prod_name varchar(60) NOT NULL DEFAULT '',
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (product_id)
) $charset_collate;";
dbDelta($sql);
// fow_oh_categoryテーブルの登録
$table = $wpdb->prefix . Fow_OnlineHelp_Lib::FOW_OH_TABLES['category'];
$sql =
"CREATE TABLE $table (
cat_id int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
cat_name varchar(50) NOT NULL DEFAULT '',
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (cat_id)
) $charset_collate;";
dbDelta($sql);
// データベースバージョンの登録
update_option(Fow_OnlineHelp_Lib::FOW_OH_OPTION_DB_VERSION, $onlinehelp_lib->fow_online_help_db_version);
}
}
/**
* テーブルにサンプルデータを登録する
*/
public function install_sample_data()
{
global $wpdb;
$title = 'オンラインヘルプへようこそ';
$body = 'プラグインのインストールに成功しました。<br />これはサンプルのデータです。これを編集して、最初の項目を作成してください。';
$data = array(
'title' => $title,
'helpbody' => $body,
);
$data_format = array(
'%s',
'%s',
);
$wpdb->insert($wpdb->prefix . Fow_OnlineHelp_Lib::FOW_OH_TABLES['helpbody'], $data, $data_format);
}
}
各関数の名前が以下のように変わっています(11行目、78行目)。
fow_install_tables → install_tables
fow_install_sample_data → install_sample_data
また、これらの関数はクラスの外からアクセスできるよう、public
に指定しています。
先に作成したライブラリークラスにアクセスする必要があるため、ライブラリークラスを入れたグローバル変数 $onlinehelp_lib
を宣言します(14行目)。$onlinehelp_lib
グローバル変数は、後ほど定義します。
データベースのテーブル名などはライブラリークラスのフィールドとなったため、これらを参照している部分のコードを変更しています(16、20、43、57、71、95行目)。
クラスのフィールドにアクセスする方法として、次の2とおりが記述されています。
Fow_OnlineHelp_Lib::FOW_OH_OPTION_DB_VERSION;
$onlinehelp_lib->fow_online_help_db_version;
::
とコロンを2つつなげる方法は、クラスの静的メンバー(static
)にアクセスするためのものです。静的メンバーとは定数、static
を指定した関数を指します。静的メンバーを参照するには、クラス名::メンバー
のように記述します。
->
は、クラスの静的ではないメンバーにアクセスするためのものです。変数や、static 指定のない関数を指します。
静的ではないメンバーへのアクセスは、そのクラスのインスタンスが必要です。つまり、$instance = new CLASS_NAME();のように
new
を使用して、$instance->menber
のようにアクセスします。
メインファイルの修正
クラス化したプラグインを動作させるには、メインのonlinehelp_main.php
を以下のように修正する必要があります。
const FOW_OH_PLUGIN_DIR = WP_PLUGIN_DIR . '/fow-online-help';
require_once FOW_OH_PLUGIN_DIR . '/onlinehelp_consts.php';
require_once FOW_OH_PLUGIN_DIR . '/onlinehelp_db.php';
/**
* クラスのインスタンスを生成する
*/
global $onlinehelp_db;
global $onlinehelp_lib;
$onlinehelp_db = new Fow_OnlineHelp_DB();
$onlinehelp_lib = new Fow_OnlineHelp_Lib();
/**
* フックの登録
*/
register_activation_hook(__FILE__, 'fow_install_tables');
/**
* プラグインが有効化されたときに実行される関数
*/
function fow_install_tables()
{
global $onlinehelp_db;
$onlinehelp_db->install_tables();
$onlinehelp_db->install_sample_data();
}
/**
* オンラインヘルプの出力
*/
function print_online_help_system()
{
return 'ここにオンラインヘルプを表示する';
}
add_shortcode('fow_online_help', 'print_online_help_system');
データベースクラスとライブラリークラスのインスタンスを生成します(22-23行目)。
この2つのクラスは、プラグイン本体などからもアクセスする必要があるため、グローバル変数として定義します(20-21行目)。
プラグインが有効化されたときのフックを1つにし(28行目)、フックで呼び出される関数内で、データベースクラスの関数を実行します(33-38行目)。