WordPress可下载产品问题:免费文件需登录后直接下载防公开
WordPress免费可下载文件权限控制解决方案
针对你遇到的免费文件直接链接无权限验证的问题,给你两种实用解决方案:
一、自定义代码实现(无需插件,适合有基础的新手)
步骤1:给免费产品添加自定义字段
打开WordPress产品编辑页,滚动到页面底部的「自定义字段」区域,添加一个新字段:
- 键名:
free_download_file - 值:填入你上传到媒体库的免费文件的URL(复制媒体库文件的“永久链接”即可)
如果看不到自定义字段,点击页面右上角的「选项」,勾选「自定义字段」。
步骤2:添加权限验证代码
用代码片段插件(比如Code Snippets,避免修改主题文件出错)或者主题的functions.php文件,添加以下代码:
// 处理免费下载请求的核心逻辑 add_action('init', 'handle_free_product_download'); function handle_free_product_download() { // 判断是否是免费下载请求 if (isset($_GET['action']) && $_GET['action'] === 'free_download' && isset($_GET['product_id'])) { $product_id = intval($_GET['product_id']); $download_link = get_post_meta($product_id, 'free_download_file', true); // 检查下载链接是否有效 if (empty($download_link)) { wp_die('抱歉,该产品没有可用的免费下载链接'); } // 验证用户登录状态 if (is_user_logged_in()) { // 可选:记录下载次数(方便统计) $current_count = get_post_meta($product_id, 'free_download_count', true); update_post_meta($product_id, 'free_download_count', (int)$current_count + 1); // 跳转到真实下载链接 wp_redirect($download_link); exit; } else { // 未登录用户跳转到注册页(用WordPress默认注册地址,也可以替换成你的自定义注册页URL) wp_redirect(wp_registration_url()); exit; } } } // 自动给免费产品添加下载按钮(可选,也可以手动在产品摘要加链接) add_action('woocommerce_single_product_summary', 'render_free_download_button', 30); function render_free_download_button() { global $product; $download_link = get_post_meta($product->get_id(), 'free_download_file', true); // 只给价格为0的可下载产品添加按钮 if ($download_link && $product->is_type('downloadable') && $product->get_price() == 0) { $button_url = esc_url(add_query_arg(['action' => 'free_download', 'product_id' => $product->get_id()], home_url())); echo '<a href="' . $button_url . '" class="button alt">立即免费下载</a>'; } }
步骤3:替换旧链接
如果之前手动加了直接下载链接,删掉换成上面代码自动生成的按钮,或者手动写链接:你的站点域名/?action=free_download&product_id=产品ID
二、插件实现(纯新手友好)
安装并激活WooCommerce Free Downloads插件,然后:
- 打开免费产品的编辑页,找到「产品数据」→「下载」选项卡
- 勾选「允许免费下载」,然后在「访问限制」里选择「仅登录用户」
- 更新产品后,插件会自动生成带权限验证的下载按钮,未登录用户点击会跳转到登录/注册页
注意事项
- 不要直接在产品摘要里放文件的原始URL,必须通过验证逻辑跳转,防止链接泄露
- 如果用代码方案,建议用
Code Snippets插件管理代码,避免主题更新丢失代码 - 可以给免费产品设置价格为0,方便代码或插件识别
内容的提问来源于stack exchange,提问作者Moh3n.As
相关产品推荐
相关产品推荐

