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

Answers:


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设置了条件来检查子function.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);
吸烟警长2014年

3

子主题的functions.php文件在父主题functions.php之前加载,因此当您remove_action在子主题中运行时,您尝试删除的操作不存在,因为稍后会添加它。


1
..但是优先级10和钩子after_setup_theme是否应该解决?无论如何我应该怎么做?
吸烟警长2014年

不,优先级参数不适用于此。只是您无法删除不存在的内容。换句话说,(摘自Codex)您无法在添加操作之前成功删除该操作。
cybmeta 2014年

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);
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.