最初のお話はプラグインを作成するための準備段階として、
- WordPressに「これはプラグインですよ」と認めてもらい、
- プラグインを有効化したときに実行してもらいたいメソッドactivate()を作り、それをWordPressに実行してもらう
というところまでお話していきたいと思います。activate()は、関数として実行させても良いですし、クラスで定義されたメソッドであっても良いので、両方の場合を紹介します。
そして、次回のテーマとしては、このactivate()メソッドの役割として、プラグインに必要なデータベースのテーブルを作ってもらうことにします。
WordPressにプラグインとして認めてもらう
プラグインを配置するディレクトリとPHPファイルを作っていきます。
プラグインの名前
では、作りたい機能からプラグインの名前を決めましょう。すでにある他のプラグインと同じ名前にならないように気をつけます。ここでは、私たちの社名「株式会社 C & D」を使って、「CD Plugin」をプラグイン名とします。
プラグイン・ファイル
次は、選択したプラグイン名に由来する名前のPHPファイルを作ります。プラグインをインストールする人は複数のプラグインを利用することでしょう。そのような自分以外のプラグイン・ファイル名と同じファイル名を使うことはできません。また、プラグインのディレクトリ名も同様に重ならない唯一の名前にします。
その中にはプラグイン・ファイルだけでなくプラグインで利用するCSSファイル、JavaScriptファイルや画像ファイルなどを配置するディレクトリもあることでしょう。
標準プラグイン情報
WordPress にプラグインの存在を認識させ、プラグイン管理画面に表示させる「標準プラグイン情報」は、プラグインのメインになるPHPファイルの先頭に記述します。それを私たちのcd_plugin.phpとします。
先のディレクトリ構造にはPHPファイルを二つ置きました。cd_plugin.phpとCDPlugin.phpです。これらのうちcd_plugin.phpの方に「標準プラグイン情報」を書いてみましょう。 CDPlugin.php やその他のディレクトリなどはまだなくてかまいません。「標準プラグイン情報」を記述することで、WordPressにプラグインであることを認めてもらえます。
- cd_plugin.php に「標準プラグイン情報」を下のように記述しました。
そして、WordPressの管理者としてログインし管理者メニューの[プラグイン]をクリックすると
このようにプラグインの仲間入りができます。
プラグインが有効化された時に実行させる関数を登録する
『▲▲をしたタイミングで、◎◎をしてもらう。』そのための仕組みをプラグインフックといいます。フックにはたくさんの種類が用意されているので適切なフックを探す必要があります。プラグイン API/アクションフック一覧 が役に立つかもしれません。
関数 register_activation_hook($file, $function)
これは、プラグインを有効化したときに実行してもらいたい関数を登録する関数です。 引数は、次のように説明されています(上記リンク参照)。
引数
- $file (string) (必須)
- wp-content/pluginsディレクトリにあるメインプラグインファイルへのパス。フルパスが有効です。 初期値: なし
- $function (callback) (必須)
- プラグインが有効化されたときに実行される関数。PHPにおける疑似的な型callbackとして許可されたものである必要があります。 初期値: なし
使用例
phpファイル自身の中に実行したい関数を記述している、またはインクルードされている場合には
register_activation_hook( __FILE__, 'myplugin_activate' );
のように登録します。
ここで「__FILE__
」は、このPHPファイル自身のパス名が定義されている定数です。
また、クラスを作りそのメソッドを実行させたい場合には、まずクラスファイルをインクルードしておき、newメソッドでインスタンスを作成します。そして実行させたいメソッドを次のように登録することができます。
require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . "クラスファイル.php";
$clazz = new クラス名();
register_activation_hook(__FILE__, array($clazz, "クラスのactivateメソッド名"));
では、私たちの例で具体的に作っていきましょう。
- CDPlugin.phpに以下のコードを記述します。
<?php
class CDPlugin {
function __construct() {
}
public function activate() {
echo "初めてのプラグイン"; <-- これはやってはいけない。怒られます。
}
}
- cd_plugin.php にコードを追加します。
CDPlugin.phpを読み込ませて、インスタンスを作ります。
<?php
/*
Plugin Name: CD plugin
Plugin URI: http://www.nothing.pom/cd_plugin
Description: WordPress 初めてのプラグイン
Author: コワーキング・スペース町田「小町」
Version: 0.1
Author URI: http://www.nothing.pom
*/
require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . "CDPlugin.php";
$cdp = new CDPlugin();
register_activation_hook(__FILE__, array($cdp, "activate"));
array()
を使ってクラスとそのメソッド名を指定することで、プラグインが有効化されたタイミングで”activate”メソッドを実行するフックが登録されます。
ただし、「有効化」をしてこれを実行させるとメッセージが出てWordPressに怒られます。
今回はここまで。
次回は、activate()メソッドの中を編集していきます。目標は、プラグインに必要なデータベースのテーブルを作成することです。その際、機能のバージョンアップに伴うテーブルの変更にも気を配っていきたいと思います。