あちゃまWEB >

WordPressのフックとは

WordPressの アクション (Action)フィルター (Filter) は、WordPressの機能をカスタマイズするための仕組みです。これらをフック(Hook)と総称します。

アクション (Action)

アクションは、WordPressの特定の処理が実行されたときに、独自のコードを追加するための仕組みです。
主に何かを「追加」したり、「実行」したりする目的で使われます。
アクションは
・フック: add_action() 関数をで特定のイベントに独自コールバック関数を紐付け
・実行: do_action()で紐付けられた関数が実行される
となっています。

具体例
テーマのフッターに著作権情報を追加する wp_footer を例に撮ります。
これはフッターが読み込まれる直前に実行されるアクションフックです。
wp_headerへの追加
function add_my_copyright_to_footer() {
    echo '

© ' . date('Y') . ' My Website. All Rights Reserved.

'; } add_action('wp_footer', 'add_my_copyright_to_footer');

‘wp-footer’を処理する関数は wp-includes\general-template.php にあります。
‘wp-footer’の実行
    function get_footer( $name = null, $args = array() ) {
         :
        do_action( 'get_footer', $name, $args );
         :
    }    

よく使うフック
フック名 実行タイミング・用途 引数
get_header ヘッダー(header.php)が読み込まれる直前。特定のページで読み込むヘッダーを切り替える際などに使用。 $name, $args
get_footer フッター(footer.php)が読み込まれる直前。 $name, $args
get_sidebar サイドバー(sidebar.php)が読み込まれる直前。 $name, $args
get_template_part_{$slug} 特定のテンプレートパーツ(例:content-single.phpなど)が読み込まれる際の動的フック。 $slug, $name, $args
get_template_part テンプレートパーツが読み込まれる際の汎用フック。 $slug, $name, $templates, $args
pre_get_search_form 検索フォームが表示される直前。 $args
wp_meta メタ・ウィジェット(ログイン・ログアウト等のリンク)の中に出力される。 なし
wp_head HTMLの <head> タグ内。CSS、JS、メタタグの挿入に使用される最重要フックの一つ。 なし
wp_footer HTMLの </body> 終了タグ直前。スクリプトの読み込みやフッター要素の追加に使用。 なし
wp_body_open <body> タグが開始された直後。アクセス解析タグの挿入等によく使われる。 なし
wp_enqueue_code_editor 管理画面などでコードエディター(CodeMirror)を読み込む際の設定変更用。 $settings
admin_menu 管理画面のメインメニュー構造が作成される際。プラグイン独自の設定メニューを追加するのに必須。 なし(空文字列)


独自のアクションの追加
あなたのテーマやプラグインの中のどこかで
do_action( ‘アクション名’, $result );
と書くだけで追加される。

独自フックを作る目的
拡張性(プラグインのプラグイン化): 有名なプラグイン(WooCommerceなど)には数千の独自フックがあります。これにより、他の開発者が「支払い完了時」などのタイミングで自由に機能を拡張できるようになります。

コードの整理: メインの処理の流れを汚さずに、後付けで「メール送信」や「ログ保存」などのサブ処理を切り離して管理できます。

テーマからの制御: プラグインが表示する内容の「前」や「後」に、テーマ側でバナーや広告を差し込めるようにしてあげると親切です。

フィルター (Filter)

使い方
フック: add_filter() 関数を使って、特定のデータに独自の関数を紐付けます。
実行: apply_filters() でそのデータを処理する直前に、紐付けられた関数にデータが渡されます。
紐付けられた関数では渡されたデータを加工して返します。

主なフィルター

フック名 実行タイミング・用途 引数
the_content データベースから取得した投稿本文を画面に出力する直前。広告の挿入や文字列の置換に使用。 $content
the_title 投稿やページのタイトルを出力する直前。特定の条件でタイトルにプレフィックスを付ける際などに使用。 $title, $id
excerpt_length 自動生成される抜粋(excerpt)の長さを決定する際。表示する文字数を数値で返す。 $number
body_class bodyタグに付与されるクラス名の配列を生成する際。特定のページに独自のCSSクラスを追加するのに便利。 $classes, $class
wp_calculate_image_srcset レスポンシブイメージ用のsrcset属性を生成する際。画像URLやサイズのリストを調整できる。 $sources, $size_array, $image_src, $image_meta, $attachment_id
upload_mimes ファイルをアップロードする際の許可されているMIMEタイプを定義する際。SVGなどの許可されていない形式を追加可能。 $mimes, $user
widget_text テキストウィジェットの内容を表示する直前。ウィジェット内でショートコードを実行させたい場合など。 $text, $instance, $widget
script_loader_tag wp_enqueue_scriptで登録されたscriptタグを出力する際。asyncやdefer属性を付与する場合に使用。 $tag, $handle, $src


具体例 投稿のタイトルに「【New!】」という文字列を追加する例です。the_title は、投稿のタイトルが表示される直前に実行されるフィルターフックです。
wp_headerへの追加
function add_new_prefix_to_title($title) {
    if (in_the_loop() && is_main_query()) {
        $title = '【New!】' . $title;
    }
    return $title; // 変更したデータを必ず返す
}
add_filter('the_title', 'add_new_prefix_to_title'); 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

WordPress情報


WEB開発


その他