アクションとフィルタフック
WordPressで、アクション(action)とフィルタ(filter)フックを使用して WordPress 機能を大幅に拡張することができます。 プログラムを学んだ方は、 WordPressにアクセスするときに、ソースファイルを変更しようとするものです。 (私も初めて接するとき、ソースをたくさん修正しました。)
しかし、これは望ましいアプローチはありません。 ソースの変更を最小限に抑える必要があり、特に WordPressでもプラグインでも、コアファイルは変更しないでください。 コアファイルを変更する場合 WordPressやプラグインが更新されるたびに修正を繰り返す必要があります。 しかし、時間が経つにつれて、どこを修正したのか覚えていない場合が多く、床を見ることもあるでしょう。 フックを使用して変更したり、機能を追加することにより、このような問題を回避することができます。
前へでadd_filterの基本的な内容を説明しました。 時間になると、アクションとフィルタを扱ったかった状況が不如意ですね。
アクションとフィルタの違い
アクションとフィルタは用途と宣言され、使用されている方法に違いがあります。 およそ整理すると、次のとおりです(参照).
アクション(Action)
- 何かを追加するときに使用
- 宣言: add_action()
- 使用: do_action()
フィルタ(Filter)
- 何かを変更する必要があるときに使用
- 宣言: ADD_FILTER()
- 使用: apply_filters()
簡単に理解を理解簡単な例を挙げてみましょう。
WordPress アクションのサンプル
アクションは、次のような形式で作成することができます。
add_action('my_action_hook_name', 'my_action_function_name', $priority); function my_action_function_name() { // 함수가 수행할 작업 }
ここで、$priority はオプションで、デフォルトは「10」です。
このブログに多くのアクションが記載されており、 WordPressを使用していると、様々なアクションとフィルタフックに会うでしょう。 WordPressで、基本的に提供するためのフックがあれば、個々のプラグインでも提供しています。 そして必要に応じて、ユーザーが直接作ってもされます。
例えば、 WordPressでは、「クエリオブジェクトが作成された後に実際のクエリが実行される前に呼び出されます」 pre_get_posts アクションがあります(WordPress Codexページこのアクションについて説明しています)。
Codex書を見れこのフックは、次のように使用することができます。
<?php add_action( 'pre_get_posts', 'your_function_name' ); ?>
そして、様々な使い方が出ています。 例えば、次のような例を見ると、アクションが、具体的にどのように使用されるかを理解して、これを応用することができます。
function exclude_category( $query ) { if ( $query->is_home() && $query->is_main_query() ) { $query->set( 'cat', '-1,-1347' ); } } add_action( 'pre_get_posts', 'exclude_category' );
WordPressこの関数に会えば、アクションのリストから pre_get_postsを検索します。 pre_get_postsが検出されると $ priorityを使用して、いつ実行するかを決定しようと試みます。 数値が低いほど優先順位が与えられます。
参考までに、上記のコードでは、関数 exclude_categoryのみを作成して、実際のコードで使用していないか、またはアクションまたはフィルタにフックをしてくれないと、この関数を実行できません。 上記のコードでフックをしてくれない場合は、 add_action( 'pre_get_posts', 'exclude_category' ); パートだけコメントアウトしてくれればされます。
実行は do_action( 'my_action_hook_name');を介して行われます。 do_actionの WordPress マニュアルを見ると、 do_actionは、次のような形式で使用されます。
do_action ( string $tag, $arg = '' );
- $ tag:(文字列)(必須)実行アクションの名前
- $arg,...: (mixed) (オプション) アクションにフックされる関数に渡される追加の引数。 デフォルトでは空です。
アクションが呼び出されると、そのアクションにフックされたすべての関数が実行されます。
参考情報
フィルタの基本的な事項は、 この記事を参考にしてみてください。 そして WordPress コーデックスページを見てみると詳細な説明を見ることができます。
そして、次の文等も参考にしてみてください。
- A Quick(and in-Depth)Guide to WordPress Hooks - WPMU DEV
- 理解する WordPress Actions and Filters(WordPress アクション/フィルタを理解する)
- WordPress Hooks:Actions、Filters、and Examples(WordPress フック:アクション、フィルタ、および例)
- WordPress Action Hooks and Filter Hooks - An Introduction(WordPress アクションフックとフィルターフック - はじめに)
- WordPress Actions、Filters、and Hooks:A guide for non-developers(WordPress アクション、フィルタ、およびフック:一般のためのガイド)
記事では、WordPressでこの関数に会うと、アクションリストでpre_get_postsを探します」というフレーズがあります。 関数に会う、do_action( 'pre_get_posts'、ブラブラ)。 このコードに会うことを教えてください。
こんにちは?
アクションは、関数ファイルに追加されます。 その後、テーマ関数ファイルをロードして実行されます。 ところが、同じアクションに複数の関数を指定することができます。
上記のフレーズはexclude_category関数をいつ実行するかについて説明することで理解すればいいようです。
例えば、
function search_filter($query) {
if ( !is_admin() && $query->is_main_query() ) {
if ($query->is_search) {
$query->set('post_type', array( 'post', 'movie' ) );
}
}
}
add_action('pre_get_posts','search_filter');
このアクションを実行すると、検索結果にカスタムポストタイプが含まれます。 function search_filter関数もpre_get_postsアクションがかかっています。 ここでは、priorityを指定しないくれた。 もし、最初に実行する必要が関数があり、遅く実行する関数がある場合はpriorityを指定してくれればとなります。
예:
add_action( 'pre_get_posts', 'hwl_home_pagesize', 1 );
アクションの動作原理は、以下を参照してください。