WordPress 支付完成后设置订阅续订日期相关问题咨询
WordPress订阅下单后自定义续订日期解决方案
可用监听事件
WordPress生态内主流的订阅功能大多基于WooCommerce Subscriptions插件实现,该插件原生提供了两个适配该场景的动作钩子:
woocommerce_checkout_subscription_created:结账流程完成、订阅对象创建时触发,仅覆盖用户首次下单开通订阅的场景woocommerce_subscription_status_active:订阅状态变更为激活时触发,覆盖首次开通、后续续费后重新激活等全场景
代码部署位置
以下两种部署方式都不会修改WordPress、插件或主题的核心代码,避免更新被覆盖:
- 将代码写入当前启用主题(推荐用子主题)根目录下的
functions.php文件 - 自行创建一个自定义小型插件,将代码写入插件的主PHP文件,该方式不受主题切换影响,稳定性更高
参考示例代码
以下代码实现首次订阅下单完成后,将下一次续订日期设置为当前时间后45天:
// 绑定订阅创建事件 add_action( 'woocommerce_checkout_subscription_created', 'custom_adjust_subscription_renewal_date', 10, 3 ); function custom_adjust_subscription_renewal_date( $subscription, $order, $recurring_cart ) { // 自定义计算新的续订日期,此处示例为当前站点时间+45天 $custom_renewal_timestamp = strtotime( '+45 days', current_time( 'timestamp' ) ); $new_renewal_date = date( 'Y-m-d H:i:s', $custom_renewal_timestamp ); // 更新订阅的下一次支付日期 $subscription->update_dates( [ 'next_payment' => $new_renewal_date ] ); // 保存订阅修改,必须执行否则修改不生效 $subscription->save(); }
注意事项
- 日期格式必须严格使用
Y-m-d H:i:s的MySQL datetime格式 - 需使用WordPress原生的
current_time()函数获取站点时间,不要直接使用PHP原生time(),避免时区偏差 - 如果你使用的是其他小众订阅插件,可查阅对应插件的开发者文档获取专属的订阅创建/状态变更钩子,修改逻辑和上述示例一致
内容的提问来源于stack exchange,提问作者silberfuchz
相关产品推荐
相关产品推荐

