Отключить функцию remove_non_recurring_fees () WooCommerce Subscriptions

Я отчаянно пытаюсь удалить действие, пока тележка подсчитывает сумму.

Вот мой код:

remove_action('woocommerce_cart_calculate_fees', array('WCS_Cart_Renewal', 'remove_non_recurring_fees'), 1000);

Пока исходный хук действия выполняется в плагине WooCommerce Subscriptions:

// Remove non-recurring fees from renewal carts. Hooked in late (priority 1000), to ensure we handle all fees added by third-parties.
        add_action( 'woocommerce_cart_calculate_fees', array( $this, 'remove_non_recurring_fees' ), 1000 );

К сожалению, мне не удалось удалить подключенную функцию remove_non_recurring_fees.

Есть идеи, почему?


person Shir Gans    schedule 19.10.2020    source источник


Ответы (1)


Когда вы смотрите на WCS_Cart_Renewal Класс и remove_non_recurring_fees() функция, вы увидите, что эта функция сначала удаляет все сборы и повторно добавляет только повторяющиеся сборы, когда задействована подписка. Эта функция перехватывается с приоритетом 1000.

Вместо того, чтобы пытаться удалить крючок действия, запускающий эту функцию, у вас есть 2 других варианта:

1). Для индивидуальных сборов, добавленных вами через functions.php файл вашей темы:

Вам просто нужно будет использовать больший приоритет, как в следующем примере:

add_action( 'woocommerce_cart_calculate_fees', 'my_custom_fee', 2000 );
function my_custom_fee( $cart ) {
     // Your code
}

2). Или лучше использовать woocommerce_subscriptions_is_recurring_fee доступный фильтр:

Этот хук фильтра, который позволяет повторно добавить все желаемые сборы, которые не повторяются, с помощью этой простой строки кода:

add_filter( 'woocommerce_subscriptions_is_recurring_fee', '__return_true' );

Код находится в файле functions.php активной дочерней темы (или активной темы). Проверено и работает.

person LoicTheAztec    schedule 19.10.2020