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.