web-dev-qa-db-fra.com

Supprimer un crochet d'action dans une classe

J'ai la déclaration de classe suivante:

class stachethemes_ec_main extends stachethemes\event_calendar\stachethemes_main_template {

et la fonction suivante avec les crochets d'action:

public function add_event_tab($slug, $title, $icon, $content = "", $file = false) {

        add_action('stachethemes_ec_add_event_tab', function() use($slug, $title, $icon) {
          if ($slug != "woocommerce") :
            echo "<li data-tab='stec-layout-event-inner-{$slug}'><i class='{$icon}'></i><p>{$title}</p></li>";
          endif;
        });

        add_action('stachethemes_ec_add_event_tab_content', function() use($slug, $content, $file) {

Je souhaite supprimer le hook d'action stachethemes_ec_add_event_tab_content avec le remove_action suivant:

add_action('stachethemes_ec_add_event_tab_content','custom_stachethemes_tab_content');
function custom_stachethemes_tab_content(){
  remove_action('stachethemes_ec_add_event_tab_content',array('stachethemes_ec_main', 'add_event_tab'));
}

Est-ce que je fais quelque chose de mal, parce que ça ne marche pas?

J'ai aussi essayé avec l'approche suivante:

add_action('stachethemes_ec_add_event_tab_content','custom_stachethemes_tab_content', 20);
function custom_stachethemes_tab_content(){
  global $stachethemes;
  $stachethemes = stachethemes_ec_main::get_instance();
  remove_all_actions('stachethemes_ec_add_event_tab_content',array($stachethemes, 'add_event_tab'));
}

mais ne travaille pas!

1
deyan4

Puisque vous ne spécifiez pas de priorité à vos actions , elles seront exécutées dans l'ordre dans lequel elles ont été rencontrées. Donc, votre remove_action peut très bien être exécuté après que les actions liées au même hook aient déjà été exécutées. Vous pouvez résoudre ce problème en associant une priorité plus élevée à l'action qui effectue la suppression de la manière suivante:

add_action('stachethemes_ec_add_event_tab_content','custom_stachethemes_tab_content',20,0);

Attention également que remove_action ne supprime pas le crochet lui-même. Il supprime simplement les actions spécifiées liées à ce hook. Si une autre action est liée à ce crochet ultérieurement, elle sera exécutée.

1
cjbj