删除类中的操作挂接

时间:2017-05-01 作者:deyan4

我有以下班级声明:

class stachethemes_ec_main extends stachethemes\\event_calendar\\stachethemes_main_template {
以及以下带有动作挂钩的功能:

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) {
我想删除stachethemes_ec_add_event_tab_content 具有以下功能的行动挂钩remove_action:

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\'));
}
我有没有做错什么,因为它不起作用?

我还尝试了以下方法:

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\'));
}
但两者都不起作用!

1 个回复
SO网友:cjbj

因为您没有指定priority to your actions, 它们将按遇到的顺序执行。所以你的remove_action 很可能在绑定到同一挂钩的操作已经执行之后执行。您可以通过将更高的优先级附加到执行以下删除操作来解决此问题:

add_action(\'stachethemes_ec_add_event_tab_content\',\'custom_stachethemes_tab_content\',20,0);
还要注意remove_action 不会移除挂钩本身。它只是删除绑定到该挂钩的指定操作。如果稍后将另一个操作绑定到该挂钩,则将执行该操作。

相关推荐

无法在模板函数.php中使用IS_HOME

我试图在标题中加载一个滑块,但只在主页上加载。如果有帮助的话,我正在使用Ultralight模板。我正在尝试(在template functions.php中)执行以下操作:<?php if ( is_page( \'home\' ) ) : ?> dynamic_sidebar( \'Homepage Widget\' ); <?php endif; ?> 但这行不通。现在,通过快速的google,我似乎需要将请