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

如何在WooCommerce中实现购买后特定时长内免费提供同款产品

嘿,这个需求在做GPL插件/主题商城的商家中特别常见——用户买一次,就能在指定时长内免费拿到更新版本。我给你整理了两种实用方案,你可以根据自己的技术情况挑:

方案一:用现成插件快速搞定(适合非技术用户)

如果你不想折腾代码,直接用专门的许可证管理插件就能实现,推荐这两款:

  • Software License Manager for WooCommerce
    步骤超简单:

    1. 安装激活插件后,找到目标产品的编辑页,开启「许可证支持」
    2. 在许可证设置里,把有效期设为1年(或者你需要的时长),同时勾选「允许有效期内免费下载更新」
    3. 用户下单后,系统会自动生成带有效期的许可证,用户能在自己的账户页面查看,凭这个就能免费获取最新版本
    4. 还能设置过期提醒,引导用户续费
  • WooCommerce License Manager
    逻辑差不多,它还支持批量管理许可证,适合产品多的商家,设置流程和上面类似,重点就是给产品绑定带时长的许可证权限。

方案二:自定义代码实现(适合有开发能力的用户)

如果想完全掌控功能,不想依赖第三方插件,可以用代码自定义:

第一步:给产品添加「免费获取时长」自定义字段

先在后台产品编辑页加个输入框,让你能给每个产品设置不同的免费时长:

// 在产品编辑页的常规选项里添加自定义字段
add_action('woocommerce_product_options_general_product_data', 'add_free_access_duration_field');
function add_free_access_duration_field() {
    woocommerce_wp_text_input(array(
        'id' => '_free_access_duration',
        'label' => __('免费获取时长(天)', 'woocommerce'),
        'type' => 'number',
        'custom_attributes' => array('min' => '1'),
        'description' => '比如输入365,代表用户购买后1年内可免费获取该产品'
    ));
}

// 保存这个自定义字段的值
add_action('woocommerce_process_product_meta', 'save_free_access_duration_field');
function save_free_access_duration_field($post_id) {
    if (isset($_POST['_free_access_duration'])) {
        update_post_meta($post_id, '_free_access_duration', absint($_POST['_free_access_duration']));
    }
}

第二步:调整下载权限的有效期

让用户的下载权限自动匹配你设置的时长:

// 替换默认的下载有效期为自定义时长
add_filter('woocommerce_download_expiry', 'custom_download_expiry_duration', 10, 3);
function custom_download_expiry_duration($expiry, $product, $order_item) {
    $custom_duration = get_post_meta($product->get_id(), '_free_access_duration', true);
    if ($custom_duration) {
        return $custom_duration * DAY_IN_SECONDS; // 把天数转成秒数,符合WooCommerce的时间格式
    }
    return $expiry; // 如果没设置自定义时长,就用默认值
}

第三步:给用户显示剩余有效期

在用户账户的下载页面,加上剩余时长提示,让用户一目了然:

// 在下载链接下方显示剩余免费时长
add_action('woocommerce_available_download_after_link', 'display_download_remaining_time', 10, 1);
function display_download_remaining_time($download) {
    if ($download['access_expires']) {
        $remaining_seconds = $download['access_expires'] - current_time('timestamp');
        if ($remaining_seconds > 0) {
            $remaining_days = floor($remaining_seconds / DAY_IN_SECONDS);
            echo '<br><small style="color: #666;">剩余免费获取时长:' . $remaining_days . '天</small>';
        } else {
            echo '<br><small style="color: #dc3232;">免费获取已过期</small>';
        }
    }
}

额外提示

  • 如果你卖的是插件/主题,记得把新版本上传到同一个产品的「下载文件」里,这样用户在有效期内就能看到并下载最新版
  • 代码要放到主题的functions.php或者自定义插件里,别直接改核心文件,不然主题更新会丢代码
  • 可以配合WooCommerce的邮件功能,给用户发购买后的时长说明,以及到期前的续费提醒

内容的提问来源于stack exchange,提问作者WP Dollar Plugins

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:04:55