web-dev-qa-db-fra.com

supprimer le filtre qui appelle une fonction statique publique

Je souhaite supprimer un filtre ajouté à partir d'une fonction statique publique d'une classe de plug-in.

Le filtre est défini ici (dans la classe WCSG_Cart, partie d'un plugin):

public static function init() {
  add_filter( 'woocommerce_cart_item_name', __CLASS__ . '::add_gifting_option_cart', 1, 3 );
}

et la classe est une classe singleton - WCSG_Cart::init() est appelée immédiatement après la définition de la classe.

Dans le fichier functions.php de mon thème, j'ai

remove_filter('woocommerce_cart_item_name', array( WCSG_Cart::init(), 'WCSG_Cart::add_gifting_option_cart'), 99);

Ce qui ne semble faire aucune différence.

Comme selon cette suggestion de publication , j'ai essayé de regrouper mon appel remove_filter dans une fonction et de l'ajouter à l'action init et cela n'a pas fonctionné:

add_action('init', 'do_something', 99);
function do_something() {
  remove_filter('woocommerce_cart_item_name', array( WCSG_Cart::init(), 'WCSG_Cart::add_gifting_option_cart'), 99);
}

J'ai également essayé d'utiliser simplement le nom de la classe sous forme de chaîne ('WCSG_Cart') dans le tableau et de supprimer le WCSG_Cart:: du nom de la fonction, mais en vain.

Je ne trouve aucun exemple d'utilisation en ligne de remove_filter sur une fonction qui utilise la variable __CLASS__.

Toute aide est appréciée!

2
dafyddPrys

remove_filter est censé être appelé avec la même priorité que add_filter. Dans ce cas, vous voudrez peut-être remplacer 99 par 1, 3

remove_filter( 'woocommerce_cart_item_name', …, 1, 3 );

4
Shivanand Sharma