remove Działaj na after_setup_theme nie działa z motywu potomnego

17

Usiłuję usunąć akcję motywu dla motywu eleganckich motywów za pomocą motywu potomnego. Działa to, gdy usuwam akcję po kodzie dodawania aktywności w dowolnym miejscu w nadrzędnym funkcjach.php. Jednak nie działa, gdy dodam go z funkcji motywu potomnego. Php.

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

Działanie usuwania ma taki sam priorytet 10, jak działanie dodawania. Czy to nie powinno działać?

add_action( 'after_setup_theme', 'et_pb_setup_theme' ); //parent theme add_action
Palenie szeryfa
źródło

Odpowiedzi:

25

Jak już zauważył @cybmeta, jesteś za wcześnie na usunięcie. Musisz więc odroczyć faktyczne usunięcie, na przykład tak:

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
źródło
Pracował! Próbowałem czegoś podobnego, ale moje złe! Ponieważ ustawiłem warunek za pomocą has46, aby sprawdzić wciąż nieistniejącą akcję w funkcjach potomnych. Php , przed usunięciem nie działała !! Wielkie dzięki! 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
3

Plik functions.php motywów potomnych jest ładowany bezpośrednio przed motywem macierzystym functions.php, więc po uruchomieniu remove_actionmotywu potomnego akcja, którą próbujesz usunąć, nie istnieje, ponieważ zostanie dodana później.

cybmeta
źródło
1
..Ale priorytet nie 10 i haczyk po_setup_theme powinien się tym zająć? Jak mam to mimo wszystko zrobić?
Smoking Sheriff
Nie, argument pierwszeństwa nie jest po to. Po prostu nie możesz usunąć czegoś, co nie istnieje. Innymi słowy (wzięte z kodeksu ) nie można pomyślnie usunąć akcji przed jej dodaniem.
cybmeta
1
Jak więc można usunąć akcję ustawioną przez motyw nadrzędny?
Aerendir
1

Spróbuj (wystarczy zmienić nazwy):

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
źródło