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' );
}

Работал! Я пробовал что-то похожее, но мое плохо! Поскольку я поставил условие, используя 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в дочерней теме действие, которое вы пытаетесь удалить, не существует, поскольку оно добавляется позже.


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);
}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.