remove_action sur after_setup_theme ne fonctionne pas à partir du thème enfant

17

J'essaie de supprimer une action de thème pour un thème de thèmes élégants en utilisant un thème enfant. Cela fonctionne lorsque je supprime une action après le code add_action n'importe où dans le thème parent functions.php. Cependant, cela ne fonctionne pas lorsque je l'ajoute à partir du thème enfant functions.php.

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

L'action de suppression a la même priorité 10 que l'action d'ajout. Ça ne devrait pas marcher?

add_action( 'after_setup_theme', 'et_pb_setup_theme' ); //parent theme add_action
Shérif fumeur
la source

Réponses:

25

Comme @cybmeta l'a déjà souligné, vous êtes trop tôt avec votre suppression. Vous devez donc différer la suppression effective, par exemple comme ceci:

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
la source
Travaillé! J'ai essayé quelque chose de similaire, mais mon mauvais! Depuis que j'ai mis une condition en utilisant has_action pour vérifier une action encore inexistante dans le fichier functions.php enfant, avant remove_action cela ne fonctionnait pas !! Merci beaucoup! 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

Le fichier functions.php des thèmes enfants est chargé juste avant le thème parent functions.php, donc lorsque vous exécutez remove_actiondans le thème enfant, l'action que vous essayez de supprimer n'existe pas car elle est ajoutée plus tard.

cybmeta
la source
1
..mais la priorité 10 et le hook after_setup_theme ne devraient-ils pas s'en occuper? Comment dois-je procéder de toute façon?
Smoking Sheriff
Non, l'argument prioritaire n'est pas pour cela. Vous ne pouvez tout simplement pas supprimer quelque chose qui n'existe pas. En d'autres termes, (tiré du codex ), vous ne pouvez pas supprimer correctement l'action avant qu'elle ne soit ajoutée.
cybmeta
1
Alors, comment est-il possible de supprimer une action définie par le thème parent?
Aerendir
1

Essayez (changez simplement les noms):

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
la source