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

アクションフック、フィルターフックは、プラグイン本体の処理に利用者独自の処理を挟み込んで、プラグイン本来の動作や出力内容をカスタマイズできる仕組みです。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 というフィルターフックから渡される2つの引数は、第一引数 $html には個々のチェックボックスのhtmlタグの塊が渡されます。第二引数 $argsには配列で以下の値が渡されます。

  • manag_no(フォームID)
  • number(検索項目の順番)
  • cnt(チェックボックスの順番)
  • depth(階層)
  • class(チェックボックスに付与されるclass)
  • attr(チェックボックスに付与される属性)
  • text(チェックボックスに付記される文字列)
  • value(チェックボックスの値)
  • checked(チェックの状態)
  • show_post_cnt(件数を表示/非表示の設定)
  • post_cnt(該当件数)
  • unit(付記される単位)
  • sep(3桁ごとの半角カンマで区切るかどうか)

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

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

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

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

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

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

“ドロップダウン”形式

  • feas_archive_dropdown_class
    • selectのoptionのclassにかかるフィルターフック
    • form-controller.php 673行目
  • feas_archive_dropdown_attr
    • selectのoptionに属性を挿入するフィルターフック
    • form-controller.php 692行目
  • feas_archive_dropdown_html
    • selectのoptionのhtmlの内容にかけるフィルターフック
    • form-controller.php 715行目
  • feas_archive_dropdown_group_class
    • selectのclassにかかるフィルターフック
      • form-controller.php 734行目
  • feas_archive_dropdown_group_attr
    • selectに属性を挿入するフィルターフック
    • form-controller.php 749行目
  • feas_archive_dropdown_group_html
    • selectのhtml全体にかけるフィルターフック
    • form-controller.php 776行目

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

  • feas_archive_multiple_class
    • 各optionのclassにかかるフィルターフック
    • form-controller.php 885行目
  • feas_archive_multiple_attr
    • 各optionのattrにかかるフィルターフック
    • form-controller.php 904行目
  • feas_archive_multiple_html
    • 各optionのhtmlにかかるフィルターフック
    • form-controller.php 927行目
  • feas_archive_multiple_group_attr
    • selectのattrにかけるフィルターフック
    • form-controller.php 953行目
  • feas_archive_multiple_group_html
    • セレクトボックス全体にかけるフィルターフック
    • form-controller.php 978行目

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

  • feas_archive_checkbox_class
    • 各チェックボックスのclassにかけるフィルターフック
    • form-controller.php 1077行目
  • feas_archive_checkbox_attr
    • 各チェックボックスのattrにかけるフィルターフック
    • form-controller.php 1096行目
  • feas_archive_checkbox_html
    • 各チェックボックスごとにかけるフィルターフック
    • form-controller.php 1120行目
  • feas_archive_checkbox_group_html
    • チェックボックスグループ全体にかけるフィルターフック
    • form-controller.php 1138行目

“ラジオボタン”形式

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

“フリーワード”形式

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

テキスト入力でアーカイブ検索

  • feas_archive_text_class
    • inputのclassにかかるフィルターフック
    • form-controller.php 1422行目
  • feas_archive_text_attr
    • inputのattrにかけるフィルターフック
    • form-controller.php 1436行目
  • feas_archive_text_group_html
    • inputタグ全体にかけるフィルターフック
    • form-controller.php 1470行目

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

“ドロップダウン”形式

  • feas_term_dropdown_class
    • 各optionのclassにかかるフィルターフック
    • form-controller.php 1981行目、2217行目、2405行目
  • feas_term_dropdown_attr
    • 各optionのattrにかかるフィルターフック
    • form-controller.php 1996行目、2234行目、2427行目
  • feas_term_dropdown_html
    • 各optionごとにかけるフィルターフック
    • form-controller.php 2021行目、2259行目、2477行目
  • feas_term_dropdown_group_class
    • selectのclassにかけるフィルターフック
    • form-controller.php 2041行目、2279行目、2496行目
  • feas_term_dropdown_group_attr
    • selectのattrにかけるフィルターフック
    • form-controller.php 2054行目、2292行目、2509行目
  • feas_term_dropdown_group_html
    • selectのhtml全体にかけるフィルターフック
    • form-controller.php 2084行目、2322行目、2533行目
  • feas_term_ajax_dropdown_group_html
    • Ajaxフィルタリング全体にかけるフィルターフック
    • form-controller.php 2337行目

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

  • feas_term_multiple_class
    • 各optionのclassにかかるフィルターフック
    • form-controller.php 2611行目
  • feas_term_multiple_attr
    • 各optionのattrにかかるフィルターフック
    • form-controller.php 2631行目
  • feas_term_multiple_html
    • 各optionのattrにかけるフィルターフック
    • form-controller.php 2683行目
  • feas_term_multiple_group_class
    • セレクトボックスのattrにかけるフィルターフック
    • form-controller.php 2708行目
  • feas_term_multiple_group_attr
    • セレクトボックスのattrにかけるフィルターフック
    • form-controller.php 2722行目
  • feas_term_multiple_group_html
    • セレクトボックス全体にかけるフィルターフック
    • form-controller.php 2749行目

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

  • feas_term_checkbox_class
    • 各チェックボックスのclassにかけるフィルターフック
    • form-controller.php 2822行目
  • feas_term_checkbox_attr
    • 各チェックボックスのattrにかけるフィルターフック
    • form-controller.php 2844行目
  • feas_term_checkbox_html
    • 各チェックボックスごとにかけるフィルターフック
    • form-controller.php 2904行目
  • feas_term_checkbox_group_html
    • チェックボックスグループ全体にかけるフィルターフック
    • form-controller.php 2923行目

“ラジオボタン”形式

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

“フリーワード”形式

  • feas_term_freeword_class
    • inputのclassにかけるフィルターフック
    • form-controller.php 3146行目
  • feas_term_freeword_attr
    • inputのattrにかけるフィルターフック
    • form-controller.php 3160行目
  • feas_term_freeword_group_html
    • inputタグ全体にかけるフィルターフック
    • form-controller.php 3187行目

その他(デフォルト)

  • feas_term_default_class
    • inputのclassにかけるフィルターフック
    • form-controller.php 3216行目
  • feas_term_default_attr
    • inputのattrにかけるフィルターフック
    • form-controller.php 3230行目
  • feas_term_default_group_html
    • inputタグ全体にかけるフィルターフック
    • form-controller.php 3251行目

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

“ドロップダウン”形式

  • feas_meta_dropdown_class
    • 各optionのclassにかけるフィルターフック
    • form-controller.php 3756行目
  • feas_meta_dropdown_attr
    • 各optionのattrにかけるフィルターフック
    • form-controller.php 3775行目
  • feas_meta_dropdown_html
    • 各optionごとにかけるフィルターフック
    • form-controller.php 3806行目
  • feas_meta_dropdown_group_class
    • selectのclassにかけるフィルターフック
    • form-controller.php 3824行目
  • feas_meta_dropdown_group_attr
    • selectのattrにかけるフィルターフック
    • form-controller.php 3839行目
  • feas_meta_dropdown_group_html
    • selectのhtml全体にかけるフィルターフック
    • form-controller.php 3866行目

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

  • feas_meta_multiple_class
    • optionのclassにかけるフィルターフック
    • form-controller.php 4002行目
  • feas_meta_multiple_attr
    • 各optionのattrにかけるフィルターフック
    • form-controller.php 4021行目
  • feas_meta_multiple_html
    • 各optionのattrにかけるフィルターフック
    • form-controller.php 4052行目
  • feas_meta_multiple_group_class
    • セレクトボックスのclassにかけるフィルターフック
    • form-controller.php 4078行目
  • feas_meta_multiple_group_attr
    • セレクトボックスのattrにかけるフィルターフック
    • form-controller.php 4093行目
  • feas_meta_multiple_group_html
    • セレクトボックス全体にかけるフィルターフック
    • form-controller.php 4120行目

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

  • feas_archive_checkbox_class
    • 各チェックボックスのclassにかけるフィルターフック
    • form-controller.php 4247行目
  • feas_meta_checkbox_attr
    • 各チェックボックスのclassにかけるフィルターフック
    • form-controller.php 4266行目
  • feas_meta_checkbox_html
    • 各チェックボックスのhtmlにかけるフィルターフック
    • form-controller.php 4299行目
  • feas_meta_checkbox_group_html
    • チェックボックスグループ全体にかけるフィルターフック
    • form-controller.php 4317行目

“ラジオボタン”形式

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

“フリーワード”形式

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

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

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

その他(デフォルト)

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

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

“ドロップダウン”形式

  • feas_tag_dropdown_class
    • 各optionのclassにかけるフィルターフック
    • form-controller.php 5113行目
  • feas_tag_dropdown_attr
    • 各optionのattrにかけるフィルターフック
    • form-controller.php 5134行目
  • feas_tag_dropdown_html
    • 各optionごとにかけるフィルターフック
    • form-controller.php 5163行目
  • feas_tag_dropdown_group_class
    • selectのclassにかけるフィルターフック
    • form-controller.php 5180行目
  • feas_tag_dropdown_group_attr
    • selectのattrにかけるフィルターフック
    • form-controller.php 5195行目
  • feas_tag_dropdown_group_html
    • selectのhtml全体にかけるフィルターフック
    • form-controller.php 5224行目

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

  • feas_tag_multiple_class
    • 各optionのclassにかけるフィルターフック
    • form-controller.php 5301行目
  • feas_tag_multiple_attr
    • 各optionのattrにかけるフィルターフック
    • form-controller.php 5322行目
  • feas_tag_multiple_html
    • 各オプションごとにかけるフィルターフック
    • form-controller.php 5351行目
  • feas_tag_multiple_group_html
    • セレクトボックス全体にかけるフィルターフック
    • form-controller.php 5392行目

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

  • feas_tag_checkbox_class
    • 各チェックボックスのclassにかけるフィルターフック
    • form-controller.php 5461行目
  • feas_tag_checkbox_attr
    • 各チェックボックスのattrにかけるフィルターフック
    • form-controller.php 5480行目
  • feas_tag_checkbox_html
    • 各チェックボックスごとにかけるフィルターフック
    • form-controller.php 5510行目
  • feas_tag_checkbox_group_html
    • チェックボックスグループ全体にかけるフィルターフック
    • form-controller.php 5527行目

“ラジオボタン”形式

  • feas_tag_radio_class
    • 各radioのclassにかけるフィルターフック
    • form-controller.php 5600行目
  • feas_tag_radio_attr
    • 各radioのattrにかけるフィルターフック
    • form-controller.php 5619行目
  • feas_tag_radio_html
    • 各radioごとにかけるフィルターフック
    • form-controller.php 5649行目
  • feas_tag_radio_group_html
    • ラジオボタングループ全体にかけるフィルターフック
    • form-controller.php 5667行目

“フリーワード”形式

  • feas_tag_freeword_class
    • inputタグのclassにかけるフィルターフック
    • form-controller.php 5715行目
  • feas_tag_freeword_attr
    • inputタグのattrにかけるフィルターフック
    • form-controller.php 5729行目
  • feas_tag_freeword_group_html
    • inputタグ全体にかけるフィルターフック
    • form-controller.php 5755行目

その他(デフォルト)

  • feas_tag_freeword_class
    • inputタグのclassにかけるフィルターフック
    • form-controller.php 5784行目
  • feas_tag_freeword_attr
    • inputタグのattrにかけるフィルターフック
    • form-controller.php 5798行目
  • feas_tag_range_group_html
    • inputタグ全体にかけるフィルターフック
    • form-controller.php 5820行目

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

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

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

“表示”側のフック

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

“処理”側のフック

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

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行目

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