本記事はWordPressのフックシステム、『 add_action() 』と『 add_filter() 』の二つについて理解を深めてどのように使用するかを詳しく説明しています。
WordPressフックシステムの概要
WordPressのフックシステムには『アクションフック』と『フィルターフック』の二つのフックが存在します。
それぞれアクションフックは『 add_action() 』、フィルターフックには『 add_filter() 』を使用し
それぞれの用途に応じて使い分けます。
二つをざっくりと説明すると
『 add_action() 』 はWordPressの処理の特定の時点でカスタムコードを実行するためのポイントです。例えば、ページが読み込まれる時、カスタム投稿タイプが登録された時、ユーザーがログインした時など、特定のイベントが発生した時に実行したいカスタムアクションを登録するために『 add_action() 』を使用します。
『 add_filter() 』はWordPressが出力するデータを変更または加工するためのポイントです。例えば、投稿のコンテンツを表示する前に加工したり、サイトのタイトルを動的に変更したりする場合に
『 add_filter() 』を使用します。
両者は似ているように見えるかもしれませんが、目的と機能が異なります。『 add_action() 』はあるイベントが発生したときに特定の関数を実行するためのものであり、『 add_filter() 』はデータを加工するために使用される関数を指定するためのものです。つまり、アクションフックは「実行する」という行為に関連し、フィルターフックは「加工する」という行為に関連しています。
add_action関数の詳細
基本的な使い方
add_action( 'フック名', '関数名', 優先度, 引数の数 );
- フック名: 実行したいアクションの名前です。
- 関数名: アクションが発生した時に実行したい関数。
- 優先度(省略可能): 複数の関数が同じアクションフックに登録されている場合の実行順序を指定します。数値が小さいほど先に実行されます。デフォルトは10です。
- 引数の数(省略可能): 呼び出す関数に渡す引数の数を指定します。デフォルトは1です。
代表的なアクションフック
- init: WordPressのコア、プラグイン、テーマが読み込まれた後、WPオブジェクトが設定される前に実行されます。初期化の際に実行するカスタムコードを追加するのに適しています。
- admin_init: 管理画面のページが読み込まれるときに実行されます。管理画面でのみ必要なスクリプトやスタイルシートの登録に使います。
- wp_enqueue_scripts: フロントエンドのページが読み込まれる際にスクリプトやスタイルシートをキューに追加するために使います。
- admin_enqueue_scripts: 管理画面のページが読み込まれる際にスクリプトやスタイルシートをキューに追加するために使います。
- wp_head: HTMLのセクション内で実行され、メタタグやスクリプトなどを追加するのに適しています。
- wp_footer: ページのフッター部分でスクリプトを出力したい場合に使用します。
- save_post: 投稿やページが作成、更新されたときに実行されます。カスタムメタデータの保存に便利です。
- wp_ajax_{action}: ログインしているユーザー向けのAJAXリクエストを処理するために使います。{action}はAJAXリクエストで指定されるアクション名です。
- wp_ajax_nopriv_{action}: ログインしていないユーザー向けのAJAXリクエストを処理します。
実際には数百種類のフックが存在し、それらを全て網羅するのは難しいため、ここでは主要なものに絞って説明しています。さらに詳しいアクションフックは下記のWordPress公式を確認してください。https://developer.wordpress.org/apis/hooks/action-reference/
add_action関数の「add」という言葉は、「追加」という意味合いが強いですが、ここでの「追加」とは、WordPressの特定のイベントやアクションに対してカスタム関数を「フック(hook)」する、つまりリストに「追加」することを意味します。したがって、add_action関数自体は直接的に関数を「実行」するのではなく、指定されたアクションフックが発生した際に実行されるべき関数を「登録」または「スケジュール」するために使われます。
このプロセスは以下のように機能します:
- 登録:add_actionを使用して、WordPressの特定のアクションフックに対して実行すべきカスタム関数を登録(または追加)します。この段階では関数は実行されません。あくまで「このアクションが発生したら、この関数を実行してください」とWordPressに伝える手続きを行っています。
- トリガー:登録されたアクションフック(例:ページ読み込み、投稿公開など)がWordPress内で発生します。
- 実行:アクションフックがトリガーされた際に、add_actionで登録された関数が自動的に実行されます。
したがって、add_actionは直接的に関数を実行するわけではなく、「あるイベントが発生したときに関数を実行するための準備をする」という意味合いが正確です。これにより、開発者はWordPressのコア機能に干渉することなく、独自の機能や変更を追加することができるようになります。
例えばよく使われる「wp_enqueue_scripts」は、WordPressがウェブページに必要なスクリプトやスタイルシートを読み込む過程で発火します。このようにして、add_action('wp_enqueue_scripts', 'enqueue_theme_styles');
というコードを使うことで、テーマやプラグインのスクリプトやスタイルシートを適切に読み込ませることができます。
add_filter関数の詳細
基本的な使い方
add_filter('フック名', '関数名', 優先度, 引数の数);
- フック名: 変更したいデータを処理するフィルターフックの名前です。
- 関数名: データがフィルターを通る時に実行したい関数。
- 優先度(省略可能): 複数の関数が同じフィルターフックに登録されている場合の実行順序を指定します。数値が小さいほど先に実行されます。デフォルトは10です。
- 引数の数(省略可能): 呼び出す関数に渡す引数の数を指定します。デフォルトは1ですが、フィルターフックによっては複数の引数を受け取ることができます。
代表的なフィルターフック
- the_content: 投稿やページのコンテンツが表示される前に適用されるフィルターです。コンテンツの表示をカスタマイズする際に使用します。
- the_title: 投稿やページのタイトルが表示される前に適用されます。タイトルの出力を変更するのに使います。
- wp_title: <title>タグに表示されるテキストをフィルタリングします。SEO対策としてページタイトルを調整するのに便利です。
- post_thumbnail_html: 投稿のサムネイル(アイキャッチ画像)のHTML出力を変更する際に使用します。
- widget_text: テキストウィジェットの内容をフィルタリングする際に使用されます。
- body_class: <body>タグに適用されるCSSクラスをフィルタリングするために使用します。ページごとに異なるスタイリングを適用するのに便利です。
フィルターフックもアクションフックと同様に数百種類のフックが存在しますので、ここでは主要なものだけを紹介しました。
さらに詳しいフィルターフックは下記のWordPress公式を確認してください。
https://developer.wordpress.org/apis/hooks/filter-reference/
全体のプロセスはadd_actionと一緒です。主な違いは、それぞれが扱う対象と目的が違うだけです。
つまり、簡単に言えば、add_filter()は「データを加工・変更する」ために使います。
アクションフックとフィルターフックの違い
もう一度二つをおさらいすると
二つの違いは大きく分けて、アクションフックはWordPressの特定のイベントやタイミングでユーザー定義の関数を実行するために使用され、フィルターフックはWordPressが出力する情報やデータを修正、加工するために使われます。具体的には、アクションフックは何かを「する」ために、例えば新しい投稿タイプを登録したり、スクリプトやスタイルシートを追加したりする際に活用されます。一方、フィルターフックは何かを「変える」ために使用され、投稿内容の自動書式設定や、出力されるタイトルやメタデータの変更などに用いられます。このように、アクションとフィルターはWordPressの拡張性と柔軟性を大きく高める重要な仕組みです。
実践的な使い方
ここでは、実践的な使い方についての具体例を紹介します。
add_action関数の活用例
add_action()関数を使用する一般的なシナリオの一つは、テーマやプラグインが読み込まれた後にカスタムコードを実行することです。例えば、カスタム投稿タイプやカスタムタクソノミーを登録する必要がある場合、init
アクションフックを使用します。
function custom_post_type_setup() {
// カスタム投稿タイプを登録するコード
}
add_action('init', 'custom_post_type_setup');
また、WordPressダッシュボードにカスタム設定ページを追加したい場合は、admin_menu
アクションフックを利用できます。
function my_custom_menu_page() {
add_menu_page(
'カスタム設定',
'カスタム設定',
'manage_options',
'custom-settings-page',
'my_custom_settings_page_html', // この関数内でHTMLを出力
'',
20
);
}
add_action('admin_menu', 'my_custom_menu_page');
add_filter関数の活用例
add_filter()関数は、特定のデータを加工するために使用されます。例えば、WordPressの投稿の内容に自動で特定のテキストを追加したい場合、the_content
フィルターフックを利用します。
function add_signature_to_posts($content) {
$signature = '<p>ありがとうございました!</p>';
return $content . $signature;
}
add_filter('the_content', 'add_signature_to_posts');
また、サイトのタイトルを動的に変更したい場合は、wp_title
フィルターフックを使用できます。
function modify_wp_title($title, $sep) {
$title .= ' - カスタムテキストを追加';
return $title;
}
add_filter('wp_title', 'modify_wp_title', 10, 2);
これらの関数を使用することで、コードを直接編集することなく、WordPressサイトの挙動を柔軟にカスタマイズすることができます。
まとめ
WordPressのフックシステム、特にadd_actionとadd_filterは、サイトの機能を細かく調整できる素晴らしいツールです。アクションフックを使えば、イベント発生時に何かを「実行」する; フィルターフックでは、出力されるデータを「加工」する。これらを駆使することで、デフォルトのWordPress機能を超えたカスタマイズが可能になります。正直言って、この二つのフックがなければ、WordPressは今日ほど強力で柔軟なプラットフォームにはなっていなかったでしょう。使いこなせれば、あなたのサイトやプロジェクトは更に一歩先へと進むことができます。だからこそ、これらのフックの違いを理解し、適切に使用することが重要です。