apply_filtersとadd_filter「フィルターフック」
こんにちは。
welcartのフォーラム内を歩き回っているとフィルターとフックなどの話題が結構ありましたので
本日は「apply_filters」と「add_filter」について復習しようと思います。
まずは「apply_filters」と「add_filter」は何かって事ですが
簡単に言うとwordpress専用のPHP関数です。
(主にプラグインを作成する際に使用します)
「apply」は適用する、当てはめるなど、「add」は加えるなどの意味です。
プラグイン内で「apply_filters」が使用されている個所は
テンプレート内(functions.phpなど)で「add_filter」を使用して
ある程度自由に編集できますよって物です。
また、プラグインのバージョンアップ時など本体を編集していると上書きされてしまいますが
テンプレート内で編集していますので上書きされずに済みます。
では早速「add_filter」を使用してみましょう!
今回はwelcartの新規入会フォームの『送信する』ボタンを『送信してみる?』に変えてみましょう。
使用するテンプレートはwelcartのデフォルトテンプレートです。
最初に何処でこのボタンが使用されているかを探さなくてはいけません。
/wc_templates/member/wc_new_member_page.php
55行目辺りの
<?php usces_newmember_button($member_regmode); ?>
がボタンを表示する関数です。
次にusces_newmember_buttonが何処で定義されているか探します。
どうやら/usc-e-shop/functions/template_func.phpで定義されているようです。
2471行目辺りにありました。
function usces_newmember_button($member_regmode){
$html = '<input name="member_regmode" type="hidden" value="' . $member_regmode . '" />';
$newmemberbutton = '<input name="regmember" type="submit" value="' . __('transmit a message', 'usces') . '" />';
$html .= apply_filters('usces_filter_newmember_button', $newmemberbutton);
echo $html;
}
どうやらこれがボタンを表示させる為のコードのようです。
apply_filters('usces_filter_newmember_button', $newmemberbutton);
この中のパラメーターの意味を理解しましょう。
usces_filter_newmember_buttonがフィルター名で$newmemberbuttonが変更できる値です。
$newmemberbuttonとは何か???
上記のコード内に
$newmemberbutton = '<input name="regmember" type="submit" value="' . __('transmit a message', 'usces') . '" />';
があります。
$newmemberbuttonの中身が変更できる仕組みになっているようです。
ちなみに
$html = '<input name="member_regmode" type="hidden" value="' . $member_regmode . '" />';
は編集できないようです。
では早速「add_filter」を使用してみます。
まずは「add_filter」のパラメーターを理解しましょう。
wordpressのcodexに次のように書かれています。
add_filter( $tag, $function_to_add, $priority, $accepted_args );
$tag・・・フックするフィルター名。
$function_to_add・・・フィルターが適用された時、呼び出される関数名。
$priority・・・特定のアクションを実行する関数の順序。
数値が小さいほど早く実行し、同じ数値の場合は追加された順に実行する。
$accepted_args・・・関数が受け取る引数の数。
なので今回「add_filter」を使用する場合は
add_filter('usces_filter_newmember_button', 'my_usces_filter_newmember_button');
となります。
$tag・・・usces_filter_newmember_button
$function_to_add・・・my_usces_filter_newmember_button
$priorityは省略、$accepted_argsは省略。
$function_to_addは任意の名前でOKです。
これで関数を作成していきます。
add_filter('usces_filter_newmember_button', 'my_usces_filter_newmember_button');
function my_usces_filter_newmember_button(){
$newmemberbutton = '<input name="regmember" type="submit" value="送信してみる?" />';
echo $newmemberbutton;
}
$newmemberbuttonの中身を少し変更してみました。
これで『送信する』が『送信してみる?』に変っているはずです。
これを応用して『送信する』ボタンをオリジナルの画像にするなどできます。
以上、基礎中の基礎ですが「add_filter」を使用する事により
編集する規模が広がるのではないでしょうか?