Hallo,
Ich habe das Gefühl dass es seit Wordpress 4.7 schwieriger geworden ist, Filter zu entfernen. Ein Plugin setzt einen Filter:
class Cart{
const ADD_TO_CART_HANDLER_VARIABLE = 'wpi_variable';
public function __construct() {
add_filter('woocommerce_cart_item_product', array($this, 'translateCartItemProduct'), 10, 2);
}
}
Das ist jetzt der wesentliche Code aus dem Plugin. Den Filter möchte ich entfernen. Früher ging das relativ einfach mit folgendem Hook:
function remove_hyyan_filter(){
global $wp_filter;
if(isset($wp_filter["woocommerce_cart_item_product"][10])){
foreach($wp_filter["woocommerce_cart_item_product"][10] as $key => $hook){
if($hook["function"][1] == "translateCartItemProduct")
unset( $wp_filter["woocommerce_cart_item_product"][10][$key]);
}
}
}
add_action( 'wp', 'remove_hyyan_filter' );
Komischerweise geht das nicht mehr. Der Filter wird nicht entfernt und ich bekommen auch noch ein Warning ausgegeben:
Zitat
Notice: Indirect modification of overloaded element of WP_Hook has no effect in /…/functions.php on line 1193
Zeile 1193 ist diese:
if($hook["function"][1] == "translateCartItemProduct") unset( $wp_filter["woocommerce_cart_item_product"][10][$key]);
Ich kann mit der Meldung nichts anfangen. Fakt ist, dass es diesen Key in $wp_filter gibt. Im Debug siehts so aus:
[14-Dec-2016 16:05:19 UTC] Array
(
[000000006d99e40b0000000160735502translateCartItemProduct] => Array
(
[function] => Array
(
[0] => Hyyan\WPI\Cart Object
(
)
[1] => translateCartItemProduct
)
[accepted_args] => 2
)
)
Alles anzeigen