after_setup_themeのremove_actionが子テーマから機能しない


17

子テーマを使用してエレガントテーマテーマのテーマアクションを削除しようとしています。これは、親テーマのfunctions.php内のadd_actionコードの後に​​アクションを削除したときに機能します。ただし、子テーマのfunctions.phpから追加すると機能しません。

remove_action ('after_setup_theme', 'et_pb_setup_theme' , 10);

削除アクションは、追加アクションと同じ優先度10です。うまくいかない?

add_action( 'after_setup_theme', 'et_pb_setup_theme' ); //parent theme add_action

回答:


25

@cybmetaがすでに指摘したように、削除は早すぎます。したがって、たとえば次のように、実際の削除を延期する必要があります。

add_action( 'after_setup_theme', 'wpdev_170663_remove_parent_theme_stuff', 0 );

function wpdev_170663_remove_parent_theme_stuff() {

    remove_action( 'after_setup_theme', 'et_pb_setup_theme' );
}

働いた!私は似たようなことを試みてきましたが、私の悪いです!has_actionを使用して子functions.phpにまだ存在しないアクションをチェックする条件を設定したため、remove_actionの前に動作しませんでした!! どうもありがとう! function etn(){ if(has_action('after_setup_theme', 'et_pb_setup_theme')){ remove_action ('after_setup_theme', 'et_pb_setup_theme' ); } } add_action ('after_setup_theme', 'etn', 9);
喫煙保安官14

3

子テーマのfunctions.phpファイルは親テーマのfunctions.phpの直前にロードされるためremove_action、子テーマで実行する場合、削除しようとしているアクションは後で追加されるため存在しません。


1
..しかし、優先度10ではなく、フックafter_setup_themeがそれを処理する必要がありますか?とにかくこれをどうすればよいですか?
喫煙保安官14

いいえ、優先度引数はそのためのものではありません。単に、存在しないものを削除することはできません。言い換えると、(codexから取得した)アクションを追加する前に正常に削除することはできません。
サイブメタ14

1
それでは、親テーマによって設定されたアクションをどのように削除できますか?
アレンディル

1

試してください(名前を変更するだけです):

add_action( 'init' , 'myyy_remove' , 15 );
function myyy_remove() {
        remove_action('ACTION_NAME', 'my_function_name_Something'   ,11);
        remove_action('ACTION_NAME', 'my_function_name_Another'     ,11);
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.