2022年05月06日
WP フィルタフック
ここではWordPressの フィルタフック を解説します。
フィルタフックとはWordPressの実行過程で ユーザにパラメータを渡しカスタマイズを許可する仕掛けになります。
ここでは下記順番でフィルタフックを解説します。
1.add_filter()とは
add_filter()で、WordPressで用意された「フィルターフック名」で実行する関数をfunctions.phpに登録する事によりWordPress機能をカスタマイズする事ができます。
記述の基本形は下記になります。
function 関数名($parm1,$parm2) { //渡されたパラメータを変更します return [$parm1,$parm2] // 複数のパラメータを戻す場合 } add_filter( 'フィルターフック名', '関数名',$priority,$num );
■3行目:関数からの戻し方は関数の作成とCALL方法を参照して下さい。
■5行目:add_filterのパラメータ
$priority(整数)
実行順序を指定します。デフォルト値は10になります。
※重要
同じフィルターフック名でが10と20があった場合、10→20の順番で実行されます。
$num(整数)
受け取る引数の数を指定します。デフォルト値は1になります。
※重要
引数が2個ある場合は2を指定しないとフィルターフックは動きません。
下記にWordPressが用意してくれているフィルタフック名を解説していきます。
1.WordPress実行時に呼ばれるフィルタフック
フィルターフック名 | 説明 |
the_content | 本文データ表示する時にフックされます。
本文の先頭に定型文や季節毎の画像を追加する時に利用します。 |
redirect_canonical | URLをリダイレクトする時にフックされます。
リダイレクト機能をOFFにする時に利用させます。 |
2.管理画面の操作の時に呼ばれるフィルタフック
フィルターフック名 | 説明 |
manage_pages_columns | 管理画面の固定ページ一覧を表示する時にフックされます。
固定ページ一覧に新たなカラムを追加する時に利用します。 |
manage_posts_columns | 管理画面の投稿一覧を表示する時にフックされます。
投稿一覧に新たなカラムを追加する時に利用します。 |
3.ビジュアルエディタ関連フィルタフック
フィルターフック名 | 説明 |
tiny_mce_before_init | ビジュアルエディタがロードされる時に、フックされます。
ビジュアルエディタの機能をカスタマイズする時に利用します。 |
wp_insert_post_data | 投稿や固定ページのデータを[公開]、[更新]する時にフックされます。
このフィルタフックを使うとビジュアルエディタの本文中に色々なブロック要素を追加する事が出来るようになります。 |
mce_buttons | ビジュアルエディタに、ボタン名を設定するフィルターフックです。
新規ボタン名を追加する時に利用します。 |
mce_external_plugins | ビジュアルエディタに、ボタン処理行うスクリプトの場所を設定するフィルターフックです。
新規ボタンを追加する時に利用します。 |
4.外観→カスタマイズの時に呼ばれるフィルタフック
フィルターフック名 | 説明 |
header_video_settings | 外観→カスタマイズでビデオ設定の時にフックされます。
スマートデバイスにもビデオ表示させたい時に利用します。 |
2.apply_filters()とは
WP関数の apply_filters() は、既存のフィルターフック名を実行する関数です。
例えば、修正したコンテンツデータを'the_content'のエスケープ処理を実行させたい場合に利用します。
<?php $data = get_the_content(); // コンテンツを取得する // 取得したデータをカスタマイズする $data = apply_filters('the_content', $data ); // カスタマイズしたコンテンツをエスケープ処理する echo $data; // 書き出す ?>
又、この apply_filters() は、新規のフィルタフック名も指定できます。
これを使って apply_filters() と add_filter() の関係を解説します。
①<header.php>の中に下記を記述します。
<?php $a = 'おはよう'; $b = 'お元気ですか?'; $a = apply_filters( 'my_filters_hook', $a ); echo $a.'<br>'; echo $b.'<br>'; ?>
■3行目にapply_filters('my_filters_hook', $a)が記述されています。
しかし、functions.php にこのフィルタフック名の add_filter() を作成しないと、何もしないので下記が表示されます。
おはよう
お元気ですか?
②次に functions.php に add_filter() を記述します。
function my_func( $a ){ $a = 'こんばんは'; return $a; } add_filter( 'my_filters_hook', 'my_func', 10, 1 );
■上記の中では$aは「こんばんは」に変更して、戻ってきます。
その結果、①が実行されると下記が表示されます。
こんばんは
お元気ですか?
すなわち
・apply_filters()は、指定されたフィルターフック名を実行する関数
・add_filter()は、指定されたフィルタフック名を処理する仕組み(ユーザカスタマイズ)
になります。
よって項番1の各種のフィルタフック名はWordPressが用意してくれたものとなります。
例えばWelcart(WordPressを使った無償のe-Commerceシステム)プラグインをインストールするとこのテンプレートは下記の様なフィルターフックを用意してくれています。
下記は一部です。
フィルターフック名 | 説明 |
usces_filter_itemGpExp_cart_mark | 数量割引マークのカスタマイズするフック |
usces_filter_cart_item_name | カートに表示する商品名のカスタマイズするフック |
すなわち、この部分はデフォルトから変更しても良いですヨ!という部分にapply_filter()を設定してくれている事になります。