如何基于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
相关产品推荐
相关产品推荐

