如何在WooCommerce用户仪表盘按时长条件隐藏订阅取消按钮
实现订阅最短期限前隐藏用户仪表盘的取消按钮
你之前用的钩子不对,
woocommerce_subscriptions_admin_order_item_actions是针对后台订单详情页里的订阅操作按钮的,而你要修改的是用户前端「我的账户-订阅」页面的按钮,得用专门的前端钩子woocommerce_my_subscriptions_actions。核心逻辑:获取订阅的激活起始日期,计算当前时间与激活日期的差值,若小于设定的最短期限(比如3周),就移除「取消」按钮。
以下是可直接使用的代码:
add_filter('woocommerce_my_subscriptions_actions', 'hide_cancel_button_before_minimum_term', 10, 2); function hide_cancel_button_before_minimum_term($actions, $subscription) { // 只针对激活状态的订阅生效 if ($subscription->get_status() !== 'active') { return $actions; } // 设置最短期限:3周(换算为秒,可自行修改数值) $minimum_term = 3 * 7 * 24 * 60 * 60; // 获取订阅的正式激活起始时间 $start_date = $subscription->get_date('start'); if (!$start_date) { return $actions; } $start_timestamp = $start_date->getTimestamp(); // 计算当前时间与激活时间的差值 $current_timestamp = current_time('timestamp'); $time_elapsed = $current_timestamp - $start_timestamp; // 未达到最短期限则移除取消按钮 if ($time_elapsed < $minimum_term) { unset($actions['cancel']); } return $actions; }
代码关键点说明:
woocommerce_my_subscriptions_actions:专门控制用户「我的账户」页面订阅列表的操作按钮集合,参数包含按钮数组和当前订阅对象。$subscription->get_date('start'):精准获取订阅的正式激活起始日期,这是判断用户是否满足最短期限的基准时间。- 时间计算:用时间戳计算秒数差,搭配
current_time('timestamp')自动适配站点时区,避免时区偏差导致的判断错误。 - 状态过滤:仅对激活状态的订阅生效,不会干扰未激活、已过期等其他状态的订阅操作。
内容的提问来源于stack exchange,提问作者Jake Mulhern
相关产品推荐
相关产品推荐

