2016-04-30 14 views
1

Ich versuche mit remove_action zu verhindern, dass ein Teil eines Plugins läuft - frag mich nicht warum :-).remove_action funktioniert nicht für Funktionen innerhalb eines Plugins

Die Funktion innerhalb des Plugins ist:

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

und ich versuche, es zu entfernen, indem:

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

Aus irgendeinem Grund ist es nicht den Trick tut, obwohl dies in der Regel funktioniert in Wordpress/WooCommerce.

Kann jemand ein Licht darauf werfen, warum das bitte sein könnte? Ich habe auch versucht, meine Funktion an andere Dinge zu hängen, z.B.

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

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

Linz

Editiert: Diese Frage unterscheidet sich von der vorherigen etwa remove_action nicht funktioniert, weil das auf die falsche Priorität verwandt war - während Diese Priorität ist bei 30 korrekt.

+0

Ich habe auch versucht, den 'plugins_loaded' Haken anstelle von init zu verwenden, aber ohne Erfolg. https://codex.wordpress.org/Plugin_API/Action_Reference/plugins_loaded –

+0

Haben Sie versucht, die Priorität der 'remove_action' zu erhöhen/verringern? Ich bin mir nicht sicher, ob das funktioniert, aber vielleicht ist es einen Versuch wert. – michaelrmcneill

+0

Mögliches Duplikat von [remove \ _action() funktioniert nicht im WordPress-Plugin] (http://stackoverflow.com/questions/10673984/remove-action-not-working-in-wordpress-plugin) – MinhTri

Antwort

1

Sie müssen global auf die Klassenvariable zugreifen. Bitte versuchen Sie es.

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

Pranav! Das sieht gut aus, danke und auf jeden Fall denke ich, dass es auf dem richtigen Weg ist. Aber es scheint nicht zu funktionieren - ich habe versucht, es auch mit 'plugins_loaded' zu verknüpfen. Irgendwelche anderen Gedanken? Prost, Linz –

+0

Überlegen Sie, 'add_action ('init', 'remove_it');' zu 'add_action ('wp', 'remove_it', 30);' zu ändern. – Pranav

+0

Ooh, danke Pranav. Das schien zu funktionieren! Ich verstehe, dass wir es nun an "wp" nicht "init" angeschlossen haben, aber wäre hilfreich zu wissen, warum wir die 30 hinzugefügt haben. –