首页 > 解决方案 > WooCommerce 订阅:当状态更改为“pending_cancel”时,从 $end_date 中减去 1 天

问题描述

我正在使用带有小型支付网关服务的 WooCommerce 订阅,它们在计算订阅间隔的方式上有所不同。WooCommerce 考虑从 4 月 15 日到 5 月 15 日这样的每月周期,而支付网关考虑从 4 月 15 日到 5 月 14 日。这很好,除非用户尝试取消订阅,例如 4 月 10 日。在该日期,订阅状态从“有效”变为“待取消”。问题是我的支付网关不理解“等待取消”。它只显示“活动”或“已取消”,因此支付网关将在 5 月 14 日再次向用户收费。

我想添加一个操作,使 Woocommerce 仅在用户将订阅从“活动”更改为“待取消”时从订阅的 $end_date 中减去 1 或 2 天。这样,到了 5 月 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”函数,所以我添加了它。也没有用。

任何帮助将不胜感激。

标签: phpwordpresswoocommercewoocommerce-subscriptions

解决方案


add_filter( 'woocommerce_subscription_calculated_end_date', 'woocommerce_subscription_calculated_end_date' );

function woocommerce_subscription_calculated_end_date( $end_date, $subscription ) {

    $end_date = date( 'Y-m-d H:i:s', strtotime( "-2 days", strtotime( $end_date ) ) );
    return $end_date;
}

在此处输入图像描述

试试这个


推荐阅读