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

如何基于WordPress与WooCommerce搭建特定用户限时专属下载系统?

实现思路与具体方案

针对你需要的「用户购买设备后2年内,可下载购买日起未来1年发布的软件更新」需求,结合WooCommerce功能和REST API扩展,可按以下步骤落地:

1. 核心权限数据绑定与存储

首先给设备订单绑定权限时间范围,用WooCommerce的自定义元数据实现,订单完成时自动写入:

  • 记录订单完成时间(购买时间戳)
  • 计算软件更新发布截止时间:购买日 + 1年(仅这个时间段内发布的更新对用户开放)
  • 计算用户下载权限截止时间:购买日 + 2年(用户只能在这个时间段内下载符合条件的更新)

代码示例(添加到主题functions.php或自定义插件):

// 订单完成时自动添加权限元数据
add_action('woocommerce_order_status_completed', 'bind_device_purchase_access_meta');
function bind_device_purchase_access_meta($order_id) {
    $order = wc_get_order($order_id);
    $purchase_timestamp = strtotime($order->get_date_completed());
    
    // 计算两个关键时间点
    $update_release_end = strtotime('+1 year', $purchase_timestamp);
    $download_access_end = strtotime('+2 years', $purchase_timestamp);
    
    // 写入订单元数据
    $order->update_meta_data('_device_purchase_time', $purchase_timestamp);
    $order->update_meta_data('_update_release_deadline', $update_release_end);
    $order->update_meta_data('_download_access_deadline', $download_access_end);
    $order->save();
}

2. 软件更新内容标记

给每个软件更新(建议用WooCommerce可下载产品类型)添加发布时间戳元数据,比如_software_release_time,后续用来匹配用户权限。如果用默认产品发布日期也可以,但自定义元数据更灵活。

3. 权限验证逻辑(前端+API)

前端用户页面展示

用户登录后,遍历其所有已完成的设备订单,筛选出当前时间仍在下载权限期内的订单,再匹配发布时间在该订单「购买日-购买日+1年」范围内的软件更新,最终展示可下载列表。

REST API扩展实现

如果需要通过API提供更新列表或下载验证,注册WooCommerce REST API自定义端点,在接口内完成权限校验:

// 注册自定义API端点
add_action('rest_api_init', 'register_user_software_updates_api');
function register_user_software_updates_api() {
    register_rest_route('wc/v3', '/user/available-updates', [
        'methods' => 'GET',
        'callback' => 'fetch_user_available_updates',
        'permission_callback' => fn() => is_user_logged_in() // 仅登录用户可访问
    ]);
}

// 接口处理逻辑
function fetch_user_available_updates($request) {
    $user_id = get_current_user_id();
    $current_time = current_time('timestamp');
    $available_updates = [];

    // 获取用户所有带设备购买标记的已完成订单
    $qualified_orders = wc_get_orders([
        'customer_id' => $user_id,
        'status' => 'completed',
        'meta_key' => '_device_purchase_time',
        'meta_compare' => 'EXISTS'
    ]);

    foreach ($qualified_orders as $order) {
        $purchase_time = $order->get_meta('_device_purchase_time');
        $update_deadline = $order->get_meta('_update_release_deadline');
        $download_deadline = $order->get_meta('_download_access_deadline');

        // 跳过已过下载权限期的订单
        if ($current_time > $download_deadline) continue;

        // 查询符合发布时间范围的软件更新
        $updates = get_posts([
            'post_type' => 'product', // 软件更新用Woo产品类型
            'post_status' => 'publish',
            'meta_query' => [
                [
                    'key' => '_software_release_time',
                    'value' => [$purchase_time, $update_deadline],
                    'type' => 'numeric',
                    'compare' => 'BETWEEN'
                ]
            ]
        ]);

        // 整理返回数据(可按需添加版本号、下载链接等)
        foreach ($updates as $update) {
            $available_updates[] = [
                'id' => $update->ID,
                'title' => $update->post_title,
                'version' => get_post_meta($update->ID, '_software_version', true),
                'release_date' => date('Y-m-d', get_post_meta($update->ID, '_software_release_time', true)),
                'download_url' => wp_get_attachment_url(get_post_meta($update->ID, '_software_download_id', true))
            ];
        }
    }

    // 去重同一更新被多订单匹配的情况
    $available_updates = array_unique($available_updates, SORT_REGULAR);
    return rest_ensure_response($available_updates);
}

4. 下载链接安全加固

  • 避免直接暴露文件URL,可使用WooCommerce内置的可下载产品权限机制,配合自定义逻辑覆盖默认的下载期限
  • 或生成临时下载链接:用户点击时先验证权限,通过后生成有效期10-30分钟的专属链接

5. 可选优化

  • 在用户账户页面新增「我的软件更新」板块,直接展示可下载列表,无需调用API
  • 新增邮件提醒:当有符合用户权限的新更新发布时,自动发送通知
  • 定期清理或过滤已过期的权限订单,提升查询效率

内容的提问来源于stack exchange,提问作者Luki

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 18:45:42