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


ワードプレス×ツイッターによる無料でできるオートブログ 第十四回目 apply_filters()関数でプラグインをカスタマイズする方法

今回は、「apply_filters()」関数を使ったプラグインのカスタマイズについてです。
アプリーフィルターズとあるようにとして機能します。

以前説明した「Subscribe2」というプラグインには「apply_filters()」関数が残念ながら無いため、泣く泣くプラグインを直接改造することになったのですが、本来はもっとスマートな方法でプラグインをカスタマイズできます(のはず)。

おさらいですが、プラグインのカスタマイズはプラグインがアップデートすると上書きされて消えてしまいます。
そこでプラグインがアップデートして上書きされてもいいように「apply_filters()」と呼ばれるプラグイン開発者が用意した関数を利用してカスタマイズを行います。この章はオートブログ講座と今は関係がないので面倒な人はスルーをしてもOKです。
後の章でプラグインのカスタマイズを扱うので、役に立つ知識となります。

話がややこしくなるので今回は具体的な「apply_filters()」の中身については割愛して、使い方だけを説明します。では、仮にプラグインの中に以下のコードがあったとします。

$mail_subject = apply_filters(‘mail_subject’, $kazari , $subject );

これは架空のフィルターですが、メールの件名を自由に変更できるように用意されているとします。
「apply_filters()」は括弧の中に引数を受け取ります。カンマで文字列が区切ってあると思いますが、左から第一引数、第二引数、第三引数となります。

第一引数 ‘mail_subject’
第二引数 $kazari
第三引数 $subject

「apply_filters()」は第一引数に必ずフィルター名が入ります。
このフィルター名を見ると大体何をするフィルターなのかが分かるようになっています。
第二引数以降はいくつでも引数を増やすことができます。といっても増やすのはプラグイン開発者なので、自分では勝手に増やすことはできません。とにかく引数は必ず最低限第二まではあると覚えておいて下さい。

このフィルターの働きですが、架空ではあるのですが説明すると、ユーザーが入力したメールの件名が入った変数「$subject」にタイトル飾りが入った変数「$kazari」を受け取り、それを2つ合わせたものを変数「$mail_subject」として返しています。

件名が「こんにちは」でタイトル飾り「【通知】」だったら結果は「【通知】こんにちは」のような形で結果が返ってきます。

メールの件名についてはユーザーの方で色々と体裁を変更したいということもあるので、「apply_filters()」が設定されていてもおかしくはありません。ユーザー側で変数の「$kazari」を例えば「【通知】」から「[お知らせ]」のように変えたいということもあると思います。

そんな時は「apply_filters()」をいじるというわけです。流れは理解できたでしょうか?

では、やり方ですが、「mail_subject」というフィルターはワードプレスのどこにも存在しません。プラグイン開発者が勝手につくったフィルターフックです。

なので、まずは子テーマの「functions.php」以下のように記述します。

function myMail_subject( $kazari , $subject )
{

}

「myMail_subject」というのは自分が勝手に考えた関数名です。分かりやすい名前を付けておきます。
記述する場所は行末の「?>」の前が分かりやすいでしょう。
因みにワードプレスでフィルターと関数は同じような意味として使われています。
フィルターも関数もデータを任意に加工して返す、というような意味です。

「mail_subject」のフックはメールの件名を加工して、加工した結果を返すという機能を追加するわけですね。
で、フィルターは必ず結果という「戻り値」を返す必要があります。

で、フィルターの「戻り値」は、プラグインの apply_filters() を見ると「$mail_subject」だということが分かります。
「$mail_subject」が返されることを期待されているので、「return $mail_subject;」とします。

function myMail_subject( $kazari , $subject )
{
	//ここに具体的な処理を記述する

	return $mail_subject;

}

これが関数の基本形となります。

あとは、今回定義した mail_subject() 関数をフィルターとして登録するために「functions.php」に以下のように記述します。

関連記事