Как удалить фильтр, добавленный другим плагином в классе


Хорошо, я здесь борюсь - я чувствую, что это должно быть просто, но я просто не могу заставить это работать.

Мне нужно удалить фильтр, добавленный подписками Woocommerce. Фильтр является частью класса WC_Subscriptions_Switcher, найденного в class-wc-subscriptions-switcher.php и добавляется, как показано ниже

class WC_Subscriptions_Switcher {

    /**
     * Bootstraps the class and hooks required actions & filters.
     *
     * @since 1.4
     */
    public static function init() {
         ...

         // Display/indicate whether a cart switch item is a upgrade/downgrade/crossgrade
         add_filter( 'woocommerce_cart_item_subtotal', __CLASS__ . '::add_cart_item_switch_direction', 10, 3 );
         ...

Функция добавляет текст в корзину (либо (Обновление), (Понижение), либо (Переход), который я не хочу/должен отображаться в моем случае.

Я пробовали просто использовать функцию удаления фильтра, как показано ниже, из Кодекса Wordpress, однако текст, о котором идет речь, все равно отображается независимо.

 global $WC_Subscriptions_Switcher;
   remove_filter( 'woocommerce_cart_item_subtotal', array($WC_Subscriptions_Switcher, 'add_cart_item_switch_direction') );

Я тоже все перепробовал (думаю) Я нашел ответ ниже, а также просто попробовал следующее из remove_action или remove_filter с внешними классами?

Как мне удалить этот фильтр, чтобы он не сработал в первую очередь? Я знаю, что мог бы переопределить текст с помощью gettext, но я думаю, что это чище, чем не запустите его в первую очередь (и даже при использовании gettext теги html, добавленные фильтром, останутся).

Любая помощь приветствуется.

Author: Josh, 2019-04-15

2 answers

Вы не написали, куда вы поместили код удаления фильтра, но я подозреваю, что вы пытались удалить его до того, как он был добавлен. Еще один важный момент, вы не задали параметр приоритет в remove_filter().

Цитата из документации :

remove_filter($тег, $function_to_remove, $приоритет );

Важно: Для удаления крючка аргументы $function_to_remove и $priority должны совпадать при добавлении крючка. Это касается как фильтры, так и действия. При сбое удаления предупреждение не будет выдано.

Попробуйте удалить фильтр, когда плагины уже загружены, и введите оба необходимых параметра - имя функции и приоритет.

add_action( 'plugins_loaded', 'se334421_remove_plugin_filter' );
function se334421_remove_plugin_filter() {
    remove_filter( 'woocommerce_cart_item_subtotal', 'WC_Subscriptions_Switcher::add_cart_item_switch_direction', 10 );
}
 2
Author: nmr, 2020-06-15 08:21:38

Установите приоритет с помощью вызова действия следующим образом:

remove_filter('woocommerce_cart_item_subtotal', array($WC_Subscriptions_Switcher, 'add_cart_item_switch_direction') , 99);

Вы можете использовать числа между 0-99 для установки приоритета.

 0
Author: BlueSuiter, 2019-04-15 12:38:57