php - 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”函数,所以我添加了它。也没有用。
任何帮助将不胜感激。
解决方案
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;
}
试试这个
推荐阅读
- javascript - 如何从任何前端应用程序调用nestjs 微服务?
- uicollectionview - TVCardView 圆角的奇怪行为
- azure-devops - 使用类似信号量的条件进行管道作业排队
- python - 来自多个文件的倒排索引
- python - 如何在没有导入的情况下计算列表的第 1 和第 3 个四分位数?
- vowpalwabbit - 无法在 Mac 上安装 Vowpal Wabbit
- laravel - Laravel 带和不带参数的路由
- html - 为整个工作簿重复 vba
- java - Spring JPA 存储库接口和默认方法用例
- apache - Apache + 安装文件夹上的文件 = 损坏的文件