WooCommerce Subscriptions:支付到期后如何保留产品访问权限至可用截止日
解决WooCommerce订阅产品支付到期后仍可访问至截止日的问题
针对你遇到的用户完成分期支付后无法继续访问仍处于可用期的订阅产品问题,可通过以下代码方案修改订阅访问权限的有效期逻辑:
核心解决方案:Hook修改订阅访问到期时间
WooCommerce Subscriptions默认会以订阅的最后一期支付完成时间作为访问权限的到期节点,我们可以通过钩子woocommerce_subscription_access_expiration_date将访问有效期延长至产品的可用截止日,取订阅到期日与产品可用截止日中较晚的日期作为最终权限到期时间。
将以下代码添加到你的主题functions.php文件或自定义功能插件中:
add_filter( 'woocommerce_subscription_access_expiration_date', 'extend_subscription_access_to_product_deadline', 10, 3 ); function extend_subscription_access_to_product_deadline( $expiration_date, $subscription, $product ) { // 替换为你的可变订阅产品ID $target_product_id = 123; // 产品的可用截止日期(对应你的2024年8月31日) $product_deadline = strtotime( '2024-08-31 23:59:59' ); // 仅针对目标产品的订阅生效 if ( $subscription->get_product_id() === $target_product_id ) { $current_sub_expiry = strtotime( $expiration_date ); // 若产品截止晚于订阅到期,则更新访问有效期 if ( $product_deadline > $current_sub_expiry ) { $expiration_date = date( 'Y-m-d H:i:s', $product_deadline ); } } return $expiration_date; }
动态适配产品截止日(可选)
如果你的产品截止日是通过WooCommerce后台的「销售截止日期」设置的,可以将代码中的$product_deadline改为动态获取:
// 替换原$product_deadline赋值部分 $target_product = wc_get_product( $target_product_id ); if ( $target_product ) { $product_deadline = $target_product->get_date_on_sale_to() ? strtotime( $target_product->get_date_on_sale_to() ) : strtotime( '2024-08-31 23:59:59' ); }
验证与测试
- 完成代码添加后,创建测试订阅(选择任意分期方案)并完成支付
- 检查订阅详情中的「访问到期时间」是否已更新为产品截止日(若订阅到期早于该日期)
- 用测试用户账号验证在订阅到期后,是否仍能正常访问该产品至2024年8月31日
内容的提问来源于stack exchange,提问作者Brahim
相关产品推荐
相关产品推荐

