アクション/フィルターフックとは

アクションフック、フィルターフックは、プラグイン本体の処理に利用者独自の処理を挟み込んで、プラグイン本来の動作や出力内容をカスタマイズできる仕組みです。FEAS自体もWordPressがデータベースから記事を取得するプロセスのフィルター/アクションにフックし、WordPress本体の検索プロセスをカスタマイズすることで絞り込み検索を実現しています。

フィルターフックを使用すれば、FEASが出力するHTMLの内容に変更を加えたり、アクションフックを使用すれば、プラグインの設定画面に独自の設定項目を組み込むこともできます。

プラグインのソースコードを直に書き換えることでも処理をカスタマイズすることはできますが、プラグインのアップデートが行われるとソースコードが上書きされ、カスタマイズ部分は消失してしまいます。

独自のカスタマイズ内容は、後述のアクション/フィルターにフックする利用者独自の関数をテーマのfunctions.phpなどに書くことで、カスタマイズ内容はプラグインの外部に保存されますので、プラグインのアップデートによる消失を防げます。

フィルターにフックする関数の例:
(特定のチェックボックスを<div class=”wrap”>…</div>で囲みたい)

function wrap_checkbox_with_div( $html, $args ){

  $formNo  = $args['manag_no'];
  $number  = $args['number'];
  $i       = $args['cnt'];

  if ( 2 === $formNo && 3 === $number && 0 === $i ) {
    $preHtml  = '<div class="wrap">';
    $postHtml = '</div>';
    $html =  $preHtml . $html . $postHtml;
  }

  return $html;
}
add_filter( 'feas_meta_checkbox_html', 'wrap_checkbox_with_div', 10, 2 );

上記の関数をテーマのfunctions.phpに記述した場合、

  • フォームID=2の検索フォームの
  • 4番目の検索項目の
  • 最初のチェックボックスのみ
  • <div class=”wrap”>…</div>で囲む

という処理ができます。

feas_meta_checkbox_html というフィルターフックの第一引数 $html には個々のチェックボックスのhtmlタグの塊が渡されます。第二引数 $argsには配列で以下の4つの値が渡されます。

  • manag_no(フォームID)
  • number(検索項目の順番)
  • cnt(チェックボックスの順番)
  • show_post_cnt(件数を表示/非表示の設定)

これらの配列に入っている値を利用して条件分岐させ、希望する箇所のみに独自の処理をすることができます。

引数の内容はフックによって異なります。詳しくは下記の各フックに併記したプラグインのソースコードを参照してください。

検索フォームの”表示”に関するフック

検索フォーム”全体”に関するフック

  • feas_form_inline_style
    • formタグにインラインCSSを差し込むためのフィルターフック
    • form-controller.php 53行目
  • feas_form_attr
    • formタグに属性を挿入するフィルターフック
    • form-controller.php 68行目
  • feas_form_part_after_html
    • 各検索項目のHTMLにかかるフィルターフック
    • form-controller.php 118行目
  • feas_form_after_parts
    • 検索パーツ類の後に(formタグ内に)他のプログラムによって差し込まれる処理用のフィルターフック(hiddenタグの挿入など)
    • form-controller.php 198行目
  • feas_form_after_form
    • formタグの後に他のプログラムによって差し込まれる処理用のフィルターフック
    • form-controller.php 207行目

“アーカイブ”(年月)検索項目に関するフック

“ドロップダウン”形式

  • feas_archive_dropdown_attr
    • selectのoptionに属性を挿入するフィルターフック
    • form-controller.php 537行目
  • feas_archive_dropdown_html
    • selectのoptionのhtmlの内容にかけるフィルターフック
    • form-controller.php 565行目
  • feas_archive_dropdown_group_attr
    • selectに属性を挿入するフィルターフック
    • form-controller.php 583行目
  • feas_archive_dropdown_group_html
    • selectのhtml全体にかけるフィルターフック

“セレクトボックス”形式

  • feas_archive_multiple_attr
    • 各optionのattrにかけるフィルターフック
    • form-controller.php 683行目
  • feas_archive_multiple_html
    • 各オプションごとにかけるフィルターフック
    • form-controller.php 711行目
  • feas_archive_multiple_group_attr
    • selectのattrにかけるフィルターフック
    • form-controller.php 736行目
  • feas_archive_multiple_group_html
    • セレクトボックス全体にかけるフィルターフック
    • form-controller.php 760行目

“チェックボックス”形式

  • feas_archive_checkbox_attr
    • 各チェックボックスのattrにかけるフィルターフック
    • form-controller.php 826行目
  • feas_archive_checkbox_html
    • 各チェックボックスごとにかけるフィルターフック
    • form-controller.php 855行目
  • feas_archive_checkbox_group_html
    • チェックボックスグループ全体にかけるフィルターフック
    • form-controller.php 872行目

“ラジオボタン”形式

  • feas_archive_radio_attr
    • 各ラジオボタンのattrにかけるフィルターフック
    • form-controller.php 943行目
  • feas_archive_radio_html
    • 各ラジオボタンごとにかけるフィルターフック
    • form-controller.php 972行目
  • feas_archive_radio_group_html
    • ラジオボタングループ全体にかけるフィルターフック
    • form-controller.php 989行目

“フリーワード”形式

  • feas_archive_freeword_attr
    • inputのattrにかけるフィルターフック
    • form-controller.php 1037行目
  • feas_term_freeword_group_html
    • inputタグ全体にかけるフィルターフック
    • form-controller.php 1060行目

テキスト入力で”範囲検索”

  • feas_archive_range_attr
    • inputのattrにかけるフィルターフック
    • form-controller.php 1089行目
  • feas_archive_range_group_html
    • inputタグ全体にかけるフィルターフック
    • form-controller.php 1107行目

“タクソノミー”検索項目に関するフック

“ドロップダウン”形式

  • feas_term_dropdown_attr
    • 各optionのattrにかけるフィルターフック
    • form-controller.php 1522行目、1619行目、1816行目、1977行目
  • feas_term_dropdown_html
    • 各optionごとにかけるフィルターフック
    • form-controller.php 1548行目、1641行目、1840行目、2013行目
  • feas_term_dropdown_group_attr
    • selectのattrにかけるフィルターフック
    • form-controller.php 1568行目、1656行目、1862行目、2033行目
  • feas_term_dropdown_group_html
    • selectのhtml全体にかけるフィルターフック
    • form-controller.php 1597行目、1682行目、1891行目、2060行目
  • feas_term_ajax_dropdown_group_html
    • Ajaxフィルタリング全体にかけるフィルターフック
    • form-controller.php 1909行目

“セレクトボックス”形式

  • feas_term_multiple_attr
    • 各optionのattrにかけるフィルターフック
    • form-controller.php 2137行目
  • feas_term_multiple_html
    • 各optionのattrにかけるフィルターフック
    • form-controller.php 2165行目
  • feas_term_multiple_group_attr
    • セレクトボックスのattrにかけるフィルターフック
    • form-controller.php 2190行目
  • feas_term_multiple_group_html
    • セレクトボックス全体にかけるフィルターフック
    • form-controller.php 2216行目

“チェックボックス”形式

  • feas_term_checkbox_attr
    • 各チェックボックスのattrにかけるフィルターフック
    • form-controller.php 2286行目
  • feas_term_checkbox_html
    • 各チェックボックスごとにかけるフィルターフック
    • form-controller.php 2322行目
  • feas_term_checkbox_group_html
    • チェックボックスグループ全体にかけるフィルターフック
    • form-controller.php 2341行目

“ラジオボタン”形式

  • feas_term_radio_attr
    • 各ラジオボタンのattrにかけるフィルターフック
    • form-controller.php 2414行目
  • feas_term_radio_html
    • 各ラジオボタンごとにかけるフィルターフック
    • form-controller.php 2448行目
  • feas_term_radio_group_html
    • ラジオボタングループ全体にかけるフィルターフック
    • form-controller.php 2467行目

“フリーワード”形式

  • feas_term_freeword_attr
    • inputのattrにかけるフィルターフック
    • form-controller.php 2516行目
  • feas_term_freeword_group_html
    • inputタグ全体にかけるフィルターフック
    • form-controller.php 2540行目

その他(デフォルト)

  • feas_term_default_attr
    • inputのattrにかけるフィルターフック
    • form-controller.php 2569行目
  • feas_term_default_group_html
    • inputタグ全体にかけるフィルターフック
    • form-controller.php 2587行目

“カスタムフィールド”検索項目に関するフック

“ドロップダウン”形式

  • feas_meta_dropdown_attr
    • 各optionのattrにかけるフィルターフック
    • form-controller.php 3023行目
  • feas_meta_dropdown_html
    • 各optionごとにかけるフィルターフック
    • form-controller.php 3044行目
  • feas_meta_dropdown_group_attr
    • selectのattrにかけるフィルターフック
    • form-controller.php 3061行目
  • feas_meta_dropdown_group_html
    • selectのhtml全体にかけるフィルターフック
    • form-controller.php 3085行目

“セレクトボックス”形式

  • feas_meta_multiple_attr
    • 各optionのattrにかけるフィルターフック
    • form-controller.php 3201行目
  • feas_meta_multiple_html
    • 各optionのattrにかけるフィルターフック
    • form-controller.php 3222行目
  • feas_meta_multiple_group_attr
    • セレクトボックスのattrにかけるフィルターフック
    • form-controller.php 3247行目
  • feas_meta_multiple_group_html
    • セレクトボックス全体にかけるフィルターフック
    • form-controller.php 3271行目

“チェックボックス”形式

  • feas_meta_checkbox_html
    • 各チェックボックスのattrにかけるフィルターフック
    • form-controller.php 3404行目
  • feas_meta_checkbox_html
    • 各チェックボックスごとにかけるフィルターフック
    • form-controller.php 3404行目
  • feas_meta_checkbox_group_html
    • チェックボックスグループ全体にかけるフィルターフック
    • form-controller.php 3421行目

“ラジオボタン”形式

  • feas_meta_radio_attr
    • 各ラジオボタンのattrにかけるフィルターフック
    • form-controller.php 3532行目
  • feas_meta_radio_html
    • 各ラジオボタンごとにかけるフィルターフック
    • form-controller.php 3555行目
  • feas_meta_radio_group_html
    • ラジオボタングループ全体にかけるフィルターフック
    • form-controller.php 3572行目

“フリーワード”形式

  • feas_meta_freeword_attr
    • inputのattrにかけるフィルターフック
    • form-controller.php 3620行目
  • feas_meta_freeword_group_html
    • inputタグ全体にかけるフィルターフック
    • form-controller.php 3643行目

テキスト入力で”範囲検索”

  • feas_meta_range_attr
    • inputのattrにかけるフィルターフック
    • form-controller.php 3672行目
  • feas_meta_range_group_html
    • inputタグ全体にかけるフィルターフック
    • form-controller.php 3690行目

その他(デフォルト)

  • feas_meta_freeword_attr
    • inputのattrにかけるフィルターフック
    • form-controller.php 3719行目
  • feas_meta_freeword_group_html
    • inputタグ全体にかけるフィルターフック
    • form-controller.php 3737行目

“タグ”検索項目に関するフック

“ドロップダウン”形式

  • feas_tag_dropdown_html
    • 各optionごとにかけるフィルターフック
    • form-controller.php 4100行目
  • feas_tag_dropdown_group_html
    • selectのhtml全体にかけるフィルターフック
    • form-controller.php 4117行目

“セレクトボックス”形式

  • feas_tag_multiple_html
    • 各オプションごとにかけるフィルターフック
    • form-controller.php 4196行目
  • feas_tag_multiple_group_html
    • セレクトボックス全体にかけるフィルターフック
    • form-controller.php 4232行目

“チェックボックス”形式

  • feas_tag_checkbox_html
    • 各チェックボックスごとにかけるフィルターフック
    • form-controller.php 4307行目
  • feas_tag_checkbox_group_html
    • チェックボックスグループ全体にかけるフィルターフック
    • form-controller.php 4323行目

“ラジオボタン”形式

  • feas_tag_radio_html
    • 各ラジオボタンごとにかけるフィルターフック
    • form-controller.php 4402行目
  • feas_tag_radio_group_html
    • ラジオボタングループ全体にかけるフィルターフック
    • form-controller.php 4419行目

“フリーワード”形式

  • feas_tag_freeword_group_html
    • inputタグ全体にかけるフィルターフック
    • form-controller.php 4472行目

その他(デフォルト)

  • feas_tag_range_group_html
    • inputタグ全体にかけるフィルターフック
    • form-controller.php 4500行目

フリーワード検索 “カスタムフィールドのキー指定”に関連するフック

  • feas_freeword_specifies_key_after_html
    • hiddenタグの追加などに使用するフィルターフック
    • form-controller.php 4540行目

“検索設定画面”に関するフック

“表示”側のフック

  • feas_admin_management_general_form_style_selector
    • 「フォームの表示スタイル」下部にて実行するフィルターフック
      (オプション項目を追加するなど)
    • management-view.php 492行目
  • feas_admin_management_item_left
    • 「検索項目の作成」タブの二段目・左下部に追加設定項目を挿入するアクションフック
    • management-view.php 1422行目
  • feas_admin_management_item_right
    • 「検索項目の作成」タブの二段目・右下部に追加設定項目を挿入するアクションフック
    • management-view.php 1582行目
  • feas_admin_management_footer
    • 設定画面最下部に処理を差し込むアクションフック
    • management-view.php 2628行目

“処理”側のフック

  • feas_admin_manag_adjust_param
    • 各検索項目の保存前のデータ調整時に他のプログラムによって差し込まれる処理用のフィルターフック
      (オプションプラグインのデータ保存プロセスに$_POSTデータを渡すなど)
    • management-controller.php 984行目
  • feas_admin_management_save_general
    • 全体の設定を保存時に他の処理を差し込むアクションフック
    • management-controller.php 766行目

JavaScript関連のフック

  • feas.ajaxInitChild
    • 「Ajaxフィルタリング」において、親タームのドロップダウンを変更した際に子タームのドロップダウン一式が削除またはリセットされる直前に差し込まれるフック。「Materialize」などのCSSフレームワークを使用するとDOM(HTML構造)が動的に変更されるため、それらの仕様にそって必要なHTMLやclassを追記するために使用できます。
    • ajax_filtering.js 63行目(デフォルトで表示するドロップダウンの数が指定されている場合)、同95行目(子タームのドロップダウンを逐次表示する場合)
  • feas.ajaxDropdownGroupHtml
    • 「Ajaxフィルタリング」において、親タームのドロップダウンを変更した際に子タームのドロップダウン一式が再生成される直前に差し込まれるフック(階層を指定しない場合のみ)。「Materialize」などのCSSフレームワークを使用するとDOM(HTML構造)が動的に変更されるため、それらの仕様にそって必要なHTMLやclassを追記するために使用できます。
      ※デフォルトで表示するドロップダウンの数が指定されている場合は適用されません。その場合は、PHP側で feas_term_dropdown_group_html を使用して静的に出力されるコードを記述してください。
    • ajax_filtering.js 232行目

アクション/フィルターフックは今後も順次拡張されます。
特定の箇所につきましてリクエストがございましたらご相談ください。