Я использую подписки WooCommerce с небольшим сервисом платежного шлюза, и они различаются по способу подсчета интервала подписки. WooCommerce считает месячный цикл с 15 апреля по 15 мая, а платежный шлюз - с 15 апреля по 14 мая. Это нормально, кроме случаев, когда пользователь пытается отменить подписку, например, 10 апреля. В этот день статус подписки изменится с «активна» на «ожидает отмены». Проблема в том, что мой платежный шлюз не распознает «ожидающую отмену». Он читает только «активен» или «отменен», поэтому 14 мая платежный шлюз снова взимает плату с пользователя.
Я хотел бы добавить действие, чтобы Woocommerce вычитала 1 или 2 дня из $ end_date подписки только тогда, когда пользователь меняет свою подписку с «активной» на «ожидающую отмену». Таким образом, когда это будет 14 мая, статус будет изменен с «ожидает отмены» на «отменен», и тогда платеж через межсетевой интерфейс не будет взиматься с пользователя. Я считаю, что действие должно выглядеть примерно так:
add_action( 'woocommerce_subscription_status_pending-cancel', 'subtract_day_from_end_date', 10, 1 );
function subtract_day_from_end_date( $subscription, $end_date ) {
// some code here
}
Любая помощь приветствуется.
РЕДАКТИРОВАТЬ: после помощи @mujuonly, которая, к сожалению, не сработала, я попробовал приведенный ниже код, снова безуспешно:
add_filter( 'woocommerce_subscription_calculated_end_date', 'subtrai_dias_end_date' );
function subtrai_dias_end_date( $end_date, $subscription ) {
if ($end_date != 0) {
$end_date = date( 'Y-m-d H:i:s', strtotime( "-2 days", strtotime( $end_date ) ) );
} else {
$end_date = $subscription->calculate_date( 'end_of_prepaid_term' );
$end_date = date( 'Y-m-d H:i:s', strtotime( "-2 days", strtotime( $end_date ) ) );
}
$dates_to_update = array();
$dates_to_update['end'] = $end_date;
$subscription->update_dates($dates_to_update);
}
Я подумал, что, возможно, $ end_date может быть пустым, поэтому добавил чек. Кроме того, просматривая документацию, я обнаружил функцию update_dates, для которой требуется массив, поэтому я добавил ее. Тоже не сработало.
Любая помощь будет принята с благодарностью.