remove_action для after_setup_theme не работает из дочерней темы

9 дек. 2014 г., 11:04:25
Просмотры: 20.4K
Голосов: 21

Я пытаюсь удалить действие темы для elegant-themes темы, используя дочернюю тему. Это работает, когда я удаляю действие после кода add_action в любом месте functions.php родительской темы. Однако это не работает, когда я добавляю его из functions.php дочерней темы.

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

У remove_action тот же приоритет 10, что и у add_action. Разве это не должно работать?

add_action('after_setup_theme', 'et_pb_setup_theme'); // добавление действия в родительской теме
0
Все ответы на вопрос 3
1
29

Как уже отметил @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' );
}
9 дек. 2014 г. 11:29:15
Комментарии

Сработало! Я пытался сделать что-то похожее, но по моей ошибке! Так как я добавил условие с использованием 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);

Smoking Sheriff Smoking Sheriff
9 дек. 2014 г. 13:18:44
3

Файл functions.php дочерней темы загружается непосредственно перед functions.php родительской темы, поэтому когда вы используете remove_action в дочерней теме, действие, которое вы пытаетесь удалить, ещё не существует, так как оно добавляется позже.

9 дек. 2014 г. 11:18:50
Комментарии

..но разве приоритет 10 и хук after_setup_theme не должны решить эту проблему? Как мне всё-таки правильно это сделать?

Smoking Sheriff Smoking Sheriff
9 дек. 2014 г. 11:21:12

Нет, аргумент приоритета не для этого. Просто вы не можете удалить то, чего ещё не существует. Другими словами (как сказано в кодексе), вы не можете успешно удалить действие до того, как оно было добавлено.

cybmeta cybmeta
9 дек. 2014 г. 11:38:58

Тогда как можно удалить действие, установленное родительской темой?

Aerendir Aerendir
27 мая 2017 г. 18:21:33
0

Попробуйте (просто измените названия):

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);
}
28 июл. 2015 г. 20:58:51