主にWEB関係の話。

スポンサード リンク

意外と簡単!?WordPressプラグインの作り方 その1

「プラグインを作る」というと何か大げさな事のように聞こえますが…。
WordPressは簡単に拡張できるよう、様々な便利な機能が提供されているので、簡単なものであれば結構手軽に作る事が出来ます。

以下、このページで配布している、わずか10行程度(HTML除く)のプラグイン、TextRepを例にプラグインの作成方法について書いてみます。

1.テキストエディタの準備

テキストエディタを用意しましょう。
フリーで軽めのWindows用エディタだとnotepad++ が個人的にはお勧めですが、使い慣れたもので構わないと思います。

2.プラグインの機能と名前を決めよう

まず、プラグインにどういう機能を持たせるかを決定する必要があります。
例として、今回は、記事中に「特定の文字列」が存在する場合に、予め管理パネルで指定しておいた文字列に差し替えて出力するプラグインを作成します。
プラグイン名は他の方の物とかぶらないような名前なら何でも良いです。
が、フォルダ名やファイル名、関数名や登録データの接頭語にも使いたいので、アルファベット表記にしてください。
(別に日本語でも問題無いですが、統一しておいた方が後々ラクな気がします。何となく。)

3.プラグイン用のディレクトリの準備

プラグイン用のディレクトリを作成します。
今回は、プラグイン名がtextrepなので、textrepとします。

4.プラグインファイルの作成

今回は1ファイルで済む内容なので、 textrep.php というファイルを作成し、3で作成したフォルダ内にUTF-8で保存します。

5.プラグイン作成時の最低限の記述

WordPressプラグインとして動作させるための最低限の記述は以下の通りです。

/*
Plugin Name: プラグイン名
Plugin URI: プラグインを配布しているURL
Description: プラグインの説明
Author: プラグインの作者名
Version: プラグインのバージョン
Author URI: プラグイン作者のウェブサイトURL
*/

ファイルの先頭でphpの複数行コメントという形で、プラグインの情報について記述します。
COBOLでいうあいでんてぃふぃけーしょんでぃびじょん的なアレです。

今回は、以下のようにしました。

/*
 Plugin Name: textRep
 Plugin URI: http://9jp.info/
 Description: 本文中の単語などを指定した文字列に置換するプラグイン。
 Author: 9JP
 Version: 0.01
 Author URI: http://9jp.info/
*/

この時点で、textrep.php をWordPressのプラグインフォルダに突っ込んやると、WordPressは「これはプラグインである」と判断し、プラグイン一覧に表示されるようになっています。
処理を1行たりとも書いていないので、何の意味もありませんが。

5.フックって何さ!?

WordPressには多数のフックが用意されていて、WordPressが特定の処理をする際に、処理の間に独自の処理を挟む事が出来ます。
詳しくは WordPressのドキュメントのアクションフック一覧フィルターフック一覧を参照のこと。

アクションフックとフィルターフック という言葉が出てきましたが、単純に処理を挟むだけのフックがアクションフック、データを受け取ってそのデータに対して何らかの処理を行い、受け取ったデータを返してやらないといけないのがフィルターフックだと、勝手に思い込んでます。
とりあえず、フィルターフックを使って、値を返さないと、その分のデータは処理中から抜け落ちます。

フック一覧を眺めていると、どういう場面で実行され、どういう値が渡されるのかがわかります。

6.フックに処理をひっかけてみる

フックに処理をひっかけるためには add_actionまたはadd_filter 関数を使います。
ドキュメントによると、今の所、add_action 及び add_filterの動作は「全く同一」との事。
今後のバージョンアップでそれぞれ別の動作をする可能性もあるらしいですが…
個人的には「今動けばどうでも良いよ!!!動かなくなった時に考えるよ!」って派なので普段は全く区別していないのですが、一応、「WordPressプラグインの作り方」という記事なので、今回は使い分ける事にします。

使い方としては

add_action('フック名','実行する処理を書いた関数名');

って感じです。

さて、本題です。
フックを使って、実際に処理を割り込ませてみます
今回は「記事本文中に特定の文字列が存在した場合に、予め指定しておいた文字列に置換する」のが目的なのでフィルターフックを使います。
記事本文に対して処理を行いたいので、記事本文を引数として渡してくれるフックを探します。
・・・
・・・・・・
・・・・・・・・

the_content(記事本文)

とか良さそうです。
記事本文を出力する前に記事本文に処理を挟むためのフックです。

早速、textrep.phpに処理を書いてみます。

 //フィルター処理なので、add_filterを使い、関数textRepFilter を読み出します。
add_filter('the_content','textRepFilter');

//デフォルトで、記事の中身が引数として渡されるので、$contentData で受け取ります。
function textRepFilter($contentData){
     //$contentDataに対する処理を書きます
        ...処理...
    //$contentDataを返り値として返します。
    return $contentData;
}

WordPressに関係する処理のみを書くとこれだけ。

実際の処理と、WordPressプラグインの情報を入れてみると…。

<?php
/*
 Plugin Name: textRep
 Plugin URI: http://9jp.info/
 Description: 本文中の単語などを指定した文字列に置換するプラグイン。
 Author: 9JP
 Version: 0.01
 Author URI: http://9jp.info/
*/
add_filter('the_content', 'textRepFilter');
function textRepFilter($contentData) {
    //設定ファイルを読み込みます。
    $repData = file_get_contents('data.dat');
    //改行で分割して配列に落とします。
    $lineArr = explode(PHP_EOL, $repData);
    //行数分繰り返します。
    foreach ($lineArr as $line) {
        //コロンで分割します。
        $strArr = explode(':', $line, 2);
        //置換します。
        $contentData = str_replace($strArr[0], $strArr[1], $contentData);
    }
    return $contentData;
}
?>

上記は、設定ファイルdata.datを読み込んで1行づつ取得し、コロンで分割し、記事中に左側の値が存在する場合、右側の値に置換する という内容なので…。

data.datに

hogehoge:ほげほげ
hogerinko:ほげりんこ

と、記述した後、textrep.php とdata.dat をWordPressプラグインディレクトリに配置し、有効化する事で…
hogehogeは「ほげほげ」に、hogerinko は「ほげりんこ」に変換されて出力されるようになります。
これで一応プラグインとして何となくの動作をするようになった気がします。

ひと段落つきました。

ただ…折角DB使ったCMSを使っているのに、設定ファイルだけファイル管理ってのは何かちょっと勿体ないので、次回はプラグインに管理画面の機能をつけて、WordPressのoptionsテーブルに設定データを保存し、呼び出す方法について書いてみようと思います。

補足

「class使いたいよ!!」って人は、例のようにadd_action またはadd_filterにオブジェクトとメソッド名を配列にして渡す事で使えます。
例:

$hogeobject = new HogeClass();
add_action( 'the_content', array($hogeobject, 'hogemethod'));
スポンサード リンク

人気記事

最近の投稿

カテゴリー

タグ