如何为WooCommerce可下载PDF设置移动端App深度链接?
实现WooCommerce移动设备自动切换App深度链接下载
嘿,这个需求很实用,我们可以通过WooCommerce的钩子函数结合设备检测来轻松实现。下面是具体的步骤和代码方案:
1. 核心思路
我们要拦截WooCommerce生成的默认下载链接,根据访问设备类型动态替换:
- 非移动设备:保留原PDF下载链接
- 移动设备:替换为你的自定义URI协议(比如
yourapp://download?file=xxx这类App深度链接)
2. 代码实现
你可以把下面的代码添加到主题的functions.php文件,更推荐的方式是创建一个简单的自定义插件(避免主题更新导致代码丢失)。
基础版本(使用WordPress自带设备检测)
// 替换WooCommerce下载链接:移动设备用深度链接,非移动用原链接 function wc_switch_mobile_download_link( $download_url, $product, $download ) { // 检测是否为移动设备(WordPress自带函数,包含平板) if ( wp_is_mobile() ) { // 替换为你的自定义URI协议,这里可以根据下载项的ID或文件URL拼接参数 $download_id = $download->get_id(); $file_url = $download->get_file(); // 示例:自定义URI,传递文件ID和原URL作为参数 $custom_deeplink = "yourapp://download?file_id={$download_id}&source_url=" . urlencode($file_url); return $custom_deeplink; } // 非移动设备返回原下载链接 return $download_url; } // 挂载到WooCommerce获取下载文件URL的钩子 add_filter( 'woocommerce_get_download_file_url', 'wc_switch_mobile_download_link', 10, 3 );
进阶版本(排除平板,仅针对手机)
如果wp_is_mobile()会把平板识别为移动设备,而你只想针对手机切换链接,可以自定义更精确的设备检测函数:
// 自定义检测:仅识别手机(排除平板) function is_mobile_phone_only() { $user_agent = $_SERVER['HTTP_USER_AGENT']; // 匹配手机UA,排除平板UA return preg_match('/(android|iphone|ipod|blackberry|opera mini|opera mobi|skyfire|maemo|windows phone|palm|iemobile|symbian|symbianos|fennec)/i', $user_agent) && !preg_match('/(ipad|android 3.0|xoom|sch-i800|playbook|tablet)/i', $user_agent); } // 替换下载链接 function wc_switch_phone_download_link( $download_url, $product, $download ) { if ( is_mobile_phone_only() ) { $download_id = $download->get_id(); $custom_deeplink = "yourapp://download?file_id={$download_id}"; return $custom_deeplink; } return $download_url; } add_filter( 'woocommerce_get_download_file_url', 'wc_switch_phone_download_link', 10, 3 );
3. 覆盖更多场景
上面的代码会修改订单详情页、"我的账户-下载"页面的下载链接。如果你还想修改结账完成感谢页的下载按钮链接,可以再添加这个钩子:
// 修改感谢页的下载链接 function wc_thankyou_page_mobile_download_link( $download ) { if ( wp_is_mobile() ) { $download_id = $download['id']; $download_object = wc_get_download($download_id); $custom_deeplink = "yourapp://download?file_id={$download_id}"; $download['download_url'] = $custom_deeplink; } return $download; } add_filter( 'woocommerce_order_downloads', 'wc_thankyou_page_mobile_download_link', 10, 1 );
4. 测试建议
- 用浏览器开发者工具切换到移动设备模式,刷新下载页面查看链接变化
- 用真实手机访问测试,确保深度链接能正常唤起你的App
- 如果需要处理"未安装App"的 fallback,可以在App端配置,或者通过JS做延迟跳转(比如点击后2秒没唤起App就自动跳转到常规下载)
内容的提问来源于stack exchange,提问作者RyanKDalton
相关产品推荐
相关产品推荐

