You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 21:33:21