I am working on a minor change to the woocommerce subscriptions operation for a specific scenario.
I would like to update the value of the ACF field after each payment for a subscription, and then if the field value is X then change the subscription date to null or blank. The idea is to disable subscription renewals in this scenario without changing the end date of the subscription.
My ACF fields:
- towp_payment_count
- number_of_billing_periods
Thats my code:
function towp_track_subscription_payments($subscription_id) {
// Sprawdzenie, czy ID subskrypcji jest poprawne
if (!$subscription_id) {
error_log('Nieprawidłowe ID subskrypcji - track_subscription_payment');
return;
}
$subscription = wcs_get_subscription($subscription_id);
if (!$subscription || is_wp_error($subscription)) {
error_log('Nie udało się pobrać id subskrypcji: ' . $subscription_id);
return;
}
// Pobierz aktualną wartość 'towp_payment_count' z ACF
$payment_count = intval(get_field('towp_payment_count', $subscription_id));
$payment_count++;
// Zaktualizuj pole 'towp_payment_count' w ACF
update_field('towp_payment_count', $payment_count, $subscription_id);
$billing_periods = get_post_meta($subscription_id, 'number_of_billing_periods', true);
if (!empty($billing_periods) && is_numeric($billing_periods)) {
if ($payment_count >= intval($billing_periods)) {
$subscription->update_dates(array('next_payment' => null));
}
}
$subscription->save();
}
add_action('woocommerce_subscription_payment_complete', 'towp_track_subscription_payments', 10, 1);