Подписки WooCommerce — ловушка действий не запускается при обновлении

Я сделал пользовательскую функцию, которая добавляет средства на счет (40 фунтов стерлингов) на счет пользователя при успешной оплате подписки.

Проблема, с которой я столкнулся, заключается в том, что ловушка, похоже, не срабатывает, когда происходит возобновление, средства не добавляются на счет.

Я включил отладку в Woocommerce и запустил обновление вручную в управлении cron, когда я делаю это, функция работает и средства добавляются на счет.

Вот моя функция (functions.php);

add_action('processed_subscription_payment', 'custom_add_funds', 10, 2);

function custom_add_funds($user_id) {

// get current user's funds
$funds = get_user_meta( $user_id, 'account_funds', true );

// add £40
$funds = $funds + 40.00;

// add funds to user
update_user_meta( $user_id, 'account_funds', $funds );

}

—— Решено ——

Мне нужно было увеличить предел памяти на WordPress, URL-адрес IPN был Fatal Errored / исчерпан

2

Решение

Вы должны попробовать этот другой подход, используя это 2 разных крючка $subscription объект, представляющий подписку, которая только что получила платеж):

  • Первый хук срабатывает при совершении платежа по подписке. Это может быть оплата за первоначальный заказ, заказ на замену или продление заказа.
  • Второй хук срабатывает, когда по подписке производится продление оплаты.

Это фрагмент (с вашим кодом):

add_action('woocommerce_subscription_payment_complete', 'custom_add_funds', 10, 1);
// add_action('woocommerce_subscription_renewal_payment_complete', 'custom_add_funds', 10, 1);
function custom_add_funds($subscription) {

// Getting the user ID from the current subscription object
$user_id = get_post_meta($subscription->ID, '_customer_user', true);

// get current user's funds
$funds = get_user_meta( $user_id, 'account_funds', true );

// add £40
$funds += 40;

// update the funds of the user with the new value
update_user_meta( $user_id, 'account_funds', $funds );
}

Это должно сработать, но поскольку оно не проверено, я не совсем уверен, даже если оно основано на других хороших ответах, которые я сделал.

Этот код находится в файле function.php вашей активной дочерней темы (или темы), а также в любом файле плагина.

0

Другие решения

woocommerce_subscription_payment_complete hook срабатывает каждый раз, когда платеж завершен, поэтому как новый платеж по подписке, так и продление вызовут его срабатывание.

Я обхожу эту проблему с помощью следующего кода …

add_action('woocommerce_subscription_payment_complete','my_function');
function my_function($subscription) {

$last_order = $subscription->get_last_order( 'all', 'any' );

if ( wcs_order_contains_renewal( $last_order ) ) {
return;
} else {

// Getting the user ID from the current subscription object
$user_id = get_post_meta($subscription->ID, '_customer_user', true);

// get current user's funds
$funds = get_user_meta( $user_id, 'account_funds', true );

// add £40
$funds += 40;

// update the funds of the user with the new value
update_user_meta( $user_id, 'account_funds', $funds );
}

}

Надеюсь, это поможет кому-то

-1

По вопросам рекламы [email protected]