次のようなクラス宣言があります。
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'));
}
しかしどちらも動作していません!
あなたはあなたの行動に 優先度を指定していないので 、それらは発生した順番で実行されます。そのため、あなたのremove_action
は、同じフックに結び付けられたアクションが既に実行された後に非常にうまく実行されるかもしれません。これを解決するには、次のように削除を行うアクションに高い優先順位を付けます。
add_action('stachethemes_ec_add_event_tab_content','custom_stachethemes_tab_content',20,0);
remove_action
はフック自体を削除しないことにも注意してください。そのフックにバインドされている指定されたアクションを削除するだけです。後で別のアクションがそのフックに関連付けられている場合は、それが実行されます。