remove_filterやremove_actionが効かない時に疑ってみるべき事【ワードプレス】
テーマのオリジナルの設定が邪魔になったり、初期状態でフックに登録されている関数を削除したい事って結構ありますよね。
そこで使うのがremove_filterとかremove_actionですが、「あれ?効かないやないの…」ってなる事ありませんか?私自身は、最近はこれでハマる事は無くなりましたが、ワードプレスのカスタマイズを始めた頃は結構あったような気がします。
そこで今回は、初心者の方向けにremove_filterやremove_actionが効かない時に疑ってみるべき事のまとめです。
~ 目次 ~
priorityを正確に記述しているか?
remove_filter()やremove_action()は、3番目の引数のpriorityを正確に記述していないと効きません。フックから削除したい関数のpriorityを正確に知る必要があります。
関数のpriorityとは
priorityというのはフックに登録された関数の優先順位です。つまりpriorityを元にフックに登録された関数の実行される順番が決まっているんですね。この数値の小さいものから実行されていきます。初期値は10なので、適当にpriorityを記述しないで登録した関数は「10」に設定されます。
個人的には「こんなん書かなくてもremoveしちゃってよ。もう…」って思います。でも、フックに同じ関数を2回登録する必要があって、片方だけ消したいって事もあるかもしれませんしね…。
priorityの調べ方
フックに関数を登録する時に指定したpriorityを知りたいと思っても、方法がわからないという方もいるかもしれません。関数が追加されたファイルを探して調べればわかりますが、時間の無駄ですし疲れます。
以前に書いた記事で、特定のフックに登録された関数の一覧を、ページ上に表示するショートコードを作った事があるので、そちらの記事を参考にして調べてみて下さい。
⇒ワードプレスで指定のフックにフックされた関数を手軽に調べる方法
親テーマ内でフックに登録された関数を削除しようとしている
WordPressのカスタマイズをする場合、子テーマを使用する事も多いと思います。子テーマのfunctions.phpに普通にremove_filterやremove_actionを記述しても、親テーマで登録された関数は消せません。
子テーマの方が先に読み込まれる
親テーマでフックに登録された関数にremoveが効かない理由は簡単で、子テーマのfunctions.phpの方が読み込み順が先だからです。消そうとした時にはまだ関数が登録されていないんですね。removeしようとした関数が無い場合、エラーも何にも出ません。
親テーマでフックに登録された関数を消すコード
親テーマによって独自にフックに登録された関数を、子テーマのfunctions.phpから消す場合は、以下の例のように記述します。
1 2 3 4 5 |
function remove_parent_theme_hook_func(){ remove_filter('hook_name','func_name',10); remove_action('hook_name','func_name',10); } add_action('after_setup_theme','remove_parent_theme_hook_func'); |
親テーマの読み込みが終わってから実行されるように、after_setup_themeというアクションフックにremove_fiterやremove_actionを登録しています。
hook_name・func_name・10(priority)の部分は、消したい関数に合わせて正確に書き換えて下さい。
最後に
どうでしょうか。ちゃんと狙った関数は消えてくれたでしょうか。
あえて書くことはしませんでしたが、remove_filterやremove_actionが効かない原因で一番多いのはシンプルな記述ミスかもしれません。初心者の方は、関数名やフック名の間違いなどにも気を付けて下さい。