この記事はブロックされています。続きを読みたい方はログインをして下さい。会員ではない方は新規会員登録をして下さい。


ワードプレスでオリジナルプラグインを作ってみよう その1

これまでワードプレスを色々とカスタマイズしてきましたが、そろそろ直接PHPをいじるのが面倒になってきたと思います。特にテーマフォルダにある「functions.php」が雑多になってきていると思います。
PHPファイルを直接いじるのもいいですが、ある程度コードが固まってきたら設定をちょっといじるだけになるので、プラグイン化して専用メニューからブラウザでコントロールできたほうがスマートです。
プラグイン作りは奥が非常に深いので、段階的にプラグインを作る方法を学んでいきましょう。

初級編として最初に作るプラグインはメール通知プラグインです。
機能はあるページにアクセスをすると、自動的にメールで通知される、というものです。
例えば、メールフォームやショッピングカートを設置していたとします。ユーザーが最後までアクションをしてくれると管理者にメールが送信されるなどして分かるのですが、ユーザーが途中で諦めてしまった場合はアクションが未遂なので分からないままです。

アクセス解析を見れば分かるのですが、リアルタイムで分かったほうが面白いですよね。
侵入者がブービートラップに掛かったことを知らせるような仕掛けがあったら面白そうです。
実用性があるかどうかは別として実験用テーマとしては最適です。

オリジナルプラグイン作るためには名前を最初に決める必要があります。
プラグイン名は現在公開されているプラグインと被らないことが重要です。
とはいえ、プラグインを「WordPress プラグインディレクトリ」に登録しないのであればなんでもOKです。

将来的に「WordPress プラグインディレクトリ」で公開する場合は、被らない名前にする必要があることを覚えておいて下さい。名前については「WordPress プラグインディレクトリ」で検索すれば分かります。

▼WordPress プラグインディレクトリ

練習用としてここでは「my mail notice」という名前にしておきます。
次にプラグインを保存するフォルダを作ります。
作る場所は「/wp-content/plugins/」の中です。フォルダは「my_mail_notice」とします。

[note]/wp-content/plugins/my_mail_notice/[/note]

フォルダ名は通常のファイル命名規則に準じます。半角スペースは使えないので「_」「-」で代用します。
ここまで大丈夫でしょうか?

次に作成したフォルダに2つのファイルと1つのフォルダを追加します。

[note]/wp-content/plugins/my_mail_notice/my_mail_notice.php (ファイル)
/wp-content/plugins/my_mail_notice/readme.txt (ファイル)
/wp-content/plugins/my_mail_notice/languages/ (フォルダ)[/note]

「my_mail_notice.php」というのはプラグインの中で最初に呼び出されるファイルです。もしプログラムが複雑になり量が多くなったらファイルを機能ごとに分けます。
「readme.txt」は取扱説明書のようなもので、普通のテキストファイルです。
「languages」フォルダは別言語を表示するための翻訳ファイルを保存しておくフォルダです。
今回は翻訳ファイルは作らないので必要がありませんが、練習として作っておきます。
基本的に最低限この2つのファイルと1つのフォルダがあればOKです。

次に「my_mail_notice.php」ヘッダ情報を追加します。
プラグインはヘッダ情報があることで認識されます。なので非常に重要です。
ファイルは文字コードを「UTF-8」で保存してください。編集するエディタによっては「UTF-8」で保存できないことがあるので気をつけ下さい。Windows付属のメモ帳では保存できません。

▼テキストエディタ

テキストエディタに関連した、ベクターソフトライブラリとPCショップからのおすすめソフトです。

追加するヘッダの書式は以下のようになっています。基本は英語表記です。

/*
Plugin Name: (プラグインの名前)
Plugin URI: (プラグインの説明と更新を示すページの URI)
Description: (プラグインの短い説明)
Version: (プラグインのバージョン番号。任意例: 1.0)
Author: (プラグイン作者の名前)
Author URI: (プラグイン作者の URI)
License: (ライセンス名の「スラッグ」 例: GPL2)
*/

「my_mail_notice.php」にヘッダを追加するとこのような感じになります。

<?php
/*
Plugin Name: my mail notice
Plugin URI: http://lesson-shool.com/
Description: Mail Notice Plugin.
Version: 1.0
Author: Million High School
Author URI: http://lesson-shool.com/
*/
?>

特に重要なのは「Plugin Name」です。これが一文字でも違うとプラグインが認識しない可能性があります。
「License」については「License: GPL2」などと記載するのですが、今回は練習なので記述しなくても構いません。
「GPL」はWordPressと同じフリーライセンスを意味するライセンス形式です。

「my_mail_notice.php」を保存しアップロードすると、管理画面のプラグイン一覧に認識されているはずです。

my_mail_noticeプラグインが一覧に表示された
my_mail_noticeプラグインが一覧に表示された

 

有効化するとプラグインが有効化されるのですが、中身がないので当然なにも起きません。
しかし、たったこれだけでプラグインの基本が作られるので簡単ですね。

では肝心の中身なのですが、どうやって何を書けばいいのでしょうか?
参考までにワードプレスに最初からインストールされている「Hello Dolly」プラグインを見てみましょう。
「Hello Dolly」プラグインは消してなければ「/wp-content/plugins/」の中にあります。
因みにフォルダには入っていません。「/wp-content/plugins/hello.php」にあります。

「hello.php」の中身はこうなっています。

<?php
/**
 * @package Hello_Dolly
 * @version 1.6
 */
/*
Plugin Name: Hello Dolly
Plugin URI: http://wordpress.org/plugins/hello-dolly/
Description: This is not just a plugin, it symbolizes the hope and enthusiasm of an entire generation summed up in two words sung most famously by Louis Armstrong: Hello, Dolly. When activated you will randomly see a lyric from <cite>Hello, Dolly</cite> in the upper right of your admin screen on every page.
Author: Matt Mullenweg
Version: 1.6
Author URI: http://ma.tt/
*/

function hello_dolly_get_lyric() {
	/** These are the lyrics to Hello Dolly */
	$lyrics = "Hello, Dolly
Well, hello, Dolly
It's so nice to have you back where you belong
You're lookin' swell, Dolly
I can tell, Dolly
You're still glowin', you're still crowin'
You're still goin' strong
We feel the room swayin'
While the band's playin'
One of your old favourite songs from way back when
So, take her wrap, fellas
Find her an empty lap, fellas
Dolly'll never go away again
Hello, Dolly
Well, hello, Dolly
It's so nice to have you back where you belong
You're lookin' swell, Dolly
I can tell, Dolly
You're still glowin', you're still crowin'
You're still goin' strong
We feel the room swayin'
While the band's playin'
One of your old favourite songs from way back when
Golly, gee, fellas
Find her a vacant knee, fellas
Dolly'll never go away
Dolly'll never go away
Dolly'll never go away again";

	// Here we split it into lines
	$lyrics = explode( "n", $lyrics );

	// And then randomly choose a line
	return wptexturize( $lyrics[ mt_rand( 0, count( $lyrics ) - 1 ) ] );
}

// This just echoes the chosen line, we'll position it later
function hello_dolly() {
	$chosen = hello_dolly_get_lyric();
	echo "<p id='dolly'>$chosen</p>";
}

// Now we set that function up to execute when the admin_notices action is called
add_action( 'admin_notices', 'hello_dolly' );

// We need some CSS to position the paragraph
function dolly_css() {
	// This makes sure that the positioning is also good for right-to-left languages
	$x = is_rtl() ? 'left' : 'right';

	echo "
	<style type='text/css'>
	#dolly {
		float: $x;
		padding-$x: 15px;
		padding-top: 5px;
		margin: 0;
		font-size: 11px;
	}
	</style>
	";
}

add_action( 'admin_head', 'dolly_css' );

?>

「Hello Dolly」プラグインは管理画面にアクセスすると画面右上に歌詞をランダムに表示するプラグインです。
中身を理解する必要はありませんが、どのように書けばいいかの参考になったと思います。

プラグインを作る際に重要なことはタイミングです。
ワードプレスにはアクションフックというものがあるのですが、アクションフックというのはタイミングのことです。
例えば記事が表示されたタイミングや、管理画面が表示されたタイミングといったように様々なタイミングがあります。このタイミングをうまく選択して、プラグインを動作させていきます。
「Hello Dolly」プラグインは中間あたりに「add_action( ‘admin_notices’, ‘hello_dolly’ );」と記述されています。

これは「管理画面のトップページが表示されたら」というタイミングで実行されることを意味しています。
となると、ワードプレスにはいったいどんなタイミング(アクションフック)があるのか気になりますね。

アクションフックはワードプレスのCodex(使い方)サイトに載っています。

▼プラグイン API/アクションフック一覧

「my_mail_notice.php」は記事(single.phpなど)または記事一覧(index.php)が表示されたタイミングで実行されるべきなので共通して呼び出されるアクションフックを選びます。

例えば投稿記事が表示される時には以下のようなアクションフックが実行されます。

[note]get_header……get_header()関数が実行されたら
get_sidebar……get_sidebar()関数が実行されたら
get_search_form……get_search_form()関数が実行されたら
get_footer……get_footer()関数が実行されたら

wp_head……ヘッダ部分の処理が行われたら
wp_enqueue_scripts……指定JavaScriptが読み込まれたら
wp_print_styles……指定スタイルが読み込まれたら
wp_print_scripts……指定スクリプトが出力されたら
wp_footer……フッター部分の処理が行われたら
wp_print_footer_scripts……フッターで指定されたスクリプトが出力されたら[/note]

例えば「get_header」は文字通りテンプレートのヘッダ部分が読み込まれたら実行されるアクションフックです。
ただし、使用しているテンプレートによってはヘッダを呼び出す関数である「<?php get_header(); ?>」を使っていないこともあるので、その場合は別のアクションフックを選びます。

関連記事