Как удалить фильтр, добавленный другим плагином в классе
Хорошо, я здесь борюсь - я чувствую, что это должно быть просто, но я просто не могу заставить это работать.
Мне нужно удалить фильтр, добавленный подписками 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, добавленные фильтром, останутся).
Любая помощь приветствуется.
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 );
}
Установите приоритет с помощью вызова действия следующим образом:
remove_filter('woocommerce_cart_item_subtotal', array($WC_Subscriptions_Switcher, 'add_cart_item_switch_direction') , 99);
Вы можете использовать числа между 0-99
для установки приоритета.