2016-04-30 6 views
1

Я пытаюсь использовать remove_action, чтобы предотвратить запуск части плагина - не спрашивайте меня, почему :-).remove_action не работает для функций внутри плагина

Функция внутри плагина:

add_action('woocommerce_before_single_product_summary', array($this, 'show_product_gallery'), 30); 

, и я стараюсь, чтобы удалить его:

remove_action('woocommerce_before_single_product_summary', array($this, 'show_product_gallery'), 30); 

По какой-то причине он не делает трюк, хотя это, как правило, работает в Wordpress/WooCommerce.

Может ли кто-нибудь просветить, почему это может случиться? Я также попытался подключить свою функцию к другим вещам, например.

add_action('init', 'remove_it'); 
function remove_it() { 
remove_action('woocommerce_before_single_product_summary', array($this, 'show_product_gallery'), 30); 
} 

(Plugin Код: https://codedump.io/share/axGWwMwAH0vn/1/linzs-hook-not-working) Cheers,

Линц

Отредактировано: Этот вопрос отличается от предыдущего о remove_action не работает, потому что было связано с неправильным приоритетом - в то время как этот приоритет верен на уровне 30.

+0

Я также попытался использовать «plugins_loaded» вместо init, но безрезультатно. https://codex.wordpress.org/Plugin_API/Action_Reference/plugins_loaded –

+0

Вы пытались увеличить/уменьшить приоритет 'remove_action'? Не уверен, что это сработает, но может стоить того. – michaelrmcneill

+0

Возможный дубликат [remove \ _action() не работает в плагине WordPress] (http://stackoverflow.com/questions/10673984/remove-action-not-working-in-wordpress-plugin) – MinhTri

ответ

1

Вам нужно получить доступ к переменной класса по всему миру. Пожалуйста, попробуйте это.

add_action('wp', 'remove_it'); 
function remove_it() { 
global $WC_Product_Gallery_slider; 
remove_action('woocommerce_before_single_product_summary', array($WC_Product_Gallery_slider, 'show_product_gallery'), 30); 
} 
+0

Пранав! Это выглядит великолепно, спасибо и определенно я думаю, что это по правильной линии. Но, похоже, он не работает - я попытался подключить его к plugins_loaded. Любые другие мысли? Cheers, Linz –

+0

Рассмотрите возможность изменения 'add_action ('init', 'remove_it');' to' add_action ('wp', 'remove_it', 30); '. – Pranav

+0

Ох, спасибо, Пранав. Казалось, это сработало! Я понимаю, что теперь мы подключили его к 'wp' not 'init', но было бы полезно узнать, почему мы добавили 30. –

Смежные вопросы