remove_filter(もしくはremove_action)がうまく効かない、動作しない場合の確認ポイントは以下の2つです。
- 引数のプライオリティー(priority)が設置されていない。もしくは合っていない。
アクションフック・フィルターフックへ関数を追加した時と同じpriority引数を設置する必要があります。 - 小テーマから親テーマのアクションフックを取り除こうとしている。
親テーマのアクションフック・フィルターフックは単なるremove_filter、remove_actionでは取り除けません。別途、関数を作る必要があります。
Contents
引数のプライオリティ(priority)が設置されていない。もしくは合っていない。
remove_filter、remove_actionにはアクションフック・フィルターフックへ関数を追加した時と同じpriority引数を設置する必要があります。
フックを適用する際には「add_filter」もしくは「add_action」を使いますが、両者を使う場合の定義は以下のようになっています。
add_filter(‘フィルターフック名’, ‘関数名’, ‘プライオリティ’);
add_action(‘アクションフック名’, ‘関数名’, ‘プライオリティ‘);
一方、「remove_filter」もしくは「remove_action」を使う場合の定義は以下のようになっています。
remove_filter(‘フィルターフック名’, ‘関数名’, ‘プライオリティ’);
remove_action(‘アクションフック名’, ‘関数名’, ‘プライオリティ‘);
上記の「プライオリティ」の部分が「add_filter」「add_action」一致していないとうまくいきません。
基本的に’~フック名’, ‘関数名’も同じになると思うので、「add_filter」「add_action」の記述をそのまま「remove_filter」「remove_action」に差し替えればよいのです。
尚、「プライオリティ」は省略できます。省略した場合の値は「10」です。省略されている場合は「remove_filter」「remove_action」も記述は必要ありません。
プライオリティ(priority)とは
プライオリティとはその名の通り優先順位という意味で、アクションフック名に対して実行する関数の順序を示し、小さい値から実行されます。
小テーマから親テーマのアクションフック・フィルターフックを取り除こうとしている
「remove_filter」「remove_action」が効かないという場合は、このパターンが多いのではないでしょうか。
小テーマは親テーマより先に呼び出されてしまうので、小テーマに記載された「remove_filter」「remove_action」は親テーマに登録されたアクションフック・フィルターフックを取り除くことはできません。
小テーマが読み込まれた時点ではまだ親テーマのアクションフック・フィルターフックが登録されていないので当然ですね。
小テーマから親テーマのアクションフック・フィルターフックを取り除く方法
小テーマから親テーマに登録されたアクションフックを取り除くには、別途関数を作る必要があります。
作成方法は簡単で、アクションフックである「after_setup_theme」を使います。「after_setup_theme」はテーマが読み込まれた後の動作を制御するフックです。「remove_filter」「remove_action」を記述した関数を作ってこのフックに登録するだけです。
【具体的例】
function parent_hook_remove_filter(){
remove_filter( ‘remove_hook_name’, ‘remove_function_name’, 30 );
}
add_action(‘after_setup_theme‘,’parent_hook_remove_filter’);