初心者コーダーのための
HTML/CSS JavaScript PHP WordPress
難しい言葉や概念より、実践重視の入門ブログ
WordPress

【WordPress】フックとは?フックの仕組みと使い方

【WordPress】フック アクションフックとフィルターフックを知ろう!

ワードプレスには、あらかじめ設定されている基本的な機能があります。
簡単に言うと、ワードプレスの仕様みたいなものですね。

フックとは、ワードプレスの仕様を変更する仕組みのことです。

これを扱えるようになると、ある程度自由に仕様から変更していくことができ、ワードプレスの拡張性がかなり上がります
無限の可能性が秘められています。無限は少し言いすぎたかもしれない。

仕様を変更する方法として、アクションフックフィルターフックという2つの方法があります。

アクションフック

アクションフックとは、ワードプレスの特定のタイミングで、何らかの処理を行うことができるフックです。
簡単に言うとワードプレスの動きそのものを制御することができます。

アクションフックで制御できる例として、

  • カスタム投稿の追加
  • 管理画面メニューの並びや表示項目の操作
  • ヘッドタグに自動的に指定した文字列を出力する

などがあります。
他にもたくさん存在します。

フィルターフック

対してフィルターフックは、ワードプレスのデフォルトの処理途中で出力する内容を制御することができるフックです。
デフォルトの処理そのものを制御するのではなく、処理の途中で、処理内容を加工するといった感じです。

フィルターフックの例を挙げると、

  • 抜粋文の文字数変更
  • 自動付与されるスラッグ変更
  • 検索結果の順番変更

などが挙げられます。

フックの使い方

functions.phpにそれぞれの基本構文を記述することで使うことができます。

アクションフックの基本構文

// アクションフックの基本構文
function 任意の関数名(){
    // 処理内容
}
add_action('定められたフック名', '上記の関数名', 優先度);

フック名はいろいろあって覚えきれないので、都度やりたいことに応じて調べるのがベター。
一番よく見かけるであろうフック名’init’はワードプレスのロード完了時に発火します。

第三引数「優先度」は必須ではなく、任意です。
初期値に10が入っていて、数が小さいものから先に処理されます。
設定する必要がない限り、何も入れなくてOKです。

サンプルコード

ヘッドタグ末尾にコメントアウトされた「こんにちは!」が出現するアクションフックです。
GoogleAnalyticsのタグを入れる時とかに使います。

function add_head_tag(){
    echo "\n<!-- こんにちは! -->\n";
}
add_action('wp_head', 'add_head_tag');

フィルターフック基本構文

アクションフックの最終行「add_action」が「add_filter」に変わるだけです。

// フィルターフック基本構文
function 任意の関数名(){
    // 処理内容
}
add_filter('定められたフック名', '上記の関数名', 優先度);

サンプルコード

記事の本文抜粋を50文字に変更するフィルターフックです。
フィルターフックは渡ってきた値を別の値にして返すので、最後はreturnで返すのが特徴です。

function my_excerpt_length($length) {
    return 50;
}
add_filter('excerpt_mblength', 'my_excerpt_length');

登録済みフックの削除

デフォルトの処理や自身で新しく登録したフックを削除することができます。
注意点として、優先度も登録したフックの場合、優先度も記述しなければ削除してくれません

remove_action('定められたフック名', '削除したい関数名', 優先度);

フックをマスターするには

やめておきましょう…。

アクションフックやフィルターフックは、かなりの数が存在します。
下記のフック一覧を見ても「何だこれ」ってなるけど、問題ありません。

プラグイン API/アクションフック一覧 – WordPress Codex 日本語版
プラグイン API/フィルターフック一覧 – WordPress Codex 日本語版

これらを全てマスターするのは、かなり骨が折れるし、何より時間がもったいないです。

フックというものの存在とその仕組みさえ軽く理解しておけば、あとは「こんな機能ないかな」って思った時に検索して調べるのがベターです。

アクションフック・フィルターフックを使うメリット

今までプラグインに頼っていた部分を、自己完結できるようになる点が大きいです。
プラグインってちょっと不安ですよね、いつなくなるか分からないし、プラグイン同士干渉することもあるし…。

そして自分で設定していくので、プラグイン以上のカスタマイズ性があります。