Beiträge von nicmare

    Ich hatte in dem Moment wo ich das Problem aufschrieb, eine Erleuchtung. In den Releasenotes wird das Problem bzw. der Umgang mit $wp_filter erläutert:
    https://make.wordpress.org/core/2016/09/0…ns-and-filters/


    Die Zeile muss so geändert werden: if($hook["function"][1] == "translateCartItemProduct") unset( $wp_filter["woocommerce_cart_item_product"]->callbacks[10][$key]);


    Also neu ist nur "->callbacks"


    Somit ist das Problem gelöst denke ich.

    Hallo,
    Ich habe das Gefühl dass es seit Wordpress 4.7 schwieriger geworden ist, Filter zu entfernen. Ein Plugin setzt einen Filter:

    PHP
    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:

    PHP
    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:

    PHP
    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: