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!
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.