remove_filterが効かない動作しない時に確認

remove_filter(もしくはremove_action)がうまく効かない、動作しない場合の確認ポイントは以下の2つです。

  1. 引数のプライオリティー(priority)が設置されていない。もしくは合っていない。
    アクションフック・フィルターフックへ関数を追加した時と同じpriority引数を設置する必要があります。
  2. 小テーマから親テーマのアクションフックを取り除こうとしている。
    親テーマのアクションフック・フィルターフックは単なる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’);