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

17

Я пытаюсь удалить действие темы для темы изящных тем, используя дочернюю тему. Это работает, когда я удаляю действие после кода add_action в любом месте родительской темы functions.php. Однако, это не работает, когда я добавляю его из дочерней темы 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' );
}
tfrommen
источник
Работал! Я пробовал что-то похожее, но мое плохо! Поскольку я поставил условие, используя 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);
Курение Шериф
3

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

cybmeta
источник
1
... но не имеет приоритета 10, и ловушка after_setup_theme должна позаботиться об этом? Как мне это сделать?
Курение Шериф
Нет, аргумент приоритета не для этого. Просто вы не можете удалить то, что не существует. Другими словами, (взято из кодекса ) вы не можете успешно удалить действие до того, как оно было добавлено.
cybmeta
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);
}
T.Todua
источник