如何将 "mobile deep link" 设置为可从 woocommerce 下载的文件?
How can I set an "mobile deep link" to downloadable file from woocommerce?
我在 wordpress 网站上设置了 woocommerce 以下载 PDF 文件。在用户完成结帐流程并准备好下载文件后,我想检查一下他们是否在移动设备上。如果用户不在移动设备上,下载 link 将是正常的。
如果用户使用的是移动设备,我想将下载 link 设置为使用自定义 URI 方案(来自现有供应商)的 "app deep link"。例如,下载 link 不是引用 http://
或 https://
,我希望下载 link 是 appname://domain.com/folder/filename.pdf
。这样,当他们单击 link 时,PDF 将在我的应用程序中自动打开。应用程序供应商已经支持自定义 URI 架构,所以我只是在寻找 "how" 以在 WordPress/Woocommerce.
中动态设置 link
我该怎么办:
- 检测用户是否在移动设备上,并且
- 如果他们是移动用户,是否更改 URI 方案?
"Native App" 示例中描述了我试图实现的概念:http://www.mobiloitte.com/blog/deep-linking-101
对于您的第一个问题,尝试使用 javascript window.navigator.userAgent
或 PHP 尝试使用 $_SERVER['HTTP_USER_AGENT']
。这应该独立于 Wordpress 或其他站点详细信息。查看相关问题 here and here.
关于你的第二个问题,深度链接是用于个别移动应用程序的,对吧?答案可能取决于您的目标应用程序。如果它是一个现有的应用程序,您可能会与应用程序开发人员联系以获得最佳牵引力。如果您正在编写新应用,则有 android here and for iOS here. If you want a permalink URL that refers to specific content on your Wordpress page (like a specific transaction event and user name) then you can find information about permalinks and query strings with WordPress, for example here 的信息。
首先,看看你是否在移动平台上,WP 有一个功能:wp_is_mobile
(参见 Codex page)。
然后,如果您查看 class-wc-download-handler.php
文件 (see here) 的源代码,第 177 行是一个 download( $file_path, $product_id )
函数。这在第 188 行使用 apply_filters( 'woocommerce_file_download_filename', $filename, $product_id )
生成下载路径,因此理论上,您应该能够连接到它并使用正则表达式将 http
替换为您的深 link uri。
希望对您有所帮助
以下代码在任何类型的下载方法之前运行,检查它是否是移动的并将下载 URL 中的 http
或 https
替换为 appname
,以及然后最终重定向到新的 URL。在这种情况下,最终的 URL 应该是这样的:
appname://domain.com/folder/filename.pdf
复制以下代码到functions.php
:
add_action( 'woocommerce_download_file_redirect', 'change_download_link_on_mobile' , 1, 2 );
add_action( 'woocommerce_download_file_xsendfile', 'change_download_link_on_mobile', 1, 2 );
add_action( 'woocommerce_download_file_force', 'change_download_link_on_mobile' , 1, 2 );
function change_download_link_on_mobile( $file_path, $filename = '' ){
if( wp_is_mobile () ){
$file_path = preg_replace( '/http|https/','appname', $file_path ); // Replace http|https with appname
header( 'Location: ' . $file_path );
exit();
}
}
我在 wordpress 网站上设置了 woocommerce 以下载 PDF 文件。在用户完成结帐流程并准备好下载文件后,我想检查一下他们是否在移动设备上。如果用户不在移动设备上,下载 link 将是正常的。
如果用户使用的是移动设备,我想将下载 link 设置为使用自定义 URI 方案(来自现有供应商)的 "app deep link"。例如,下载 link 不是引用 http://
或 https://
,我希望下载 link 是 appname://domain.com/folder/filename.pdf
。这样,当他们单击 link 时,PDF 将在我的应用程序中自动打开。应用程序供应商已经支持自定义 URI 架构,所以我只是在寻找 "how" 以在 WordPress/Woocommerce.
我该怎么办:
- 检测用户是否在移动设备上,并且
- 如果他们是移动用户,是否更改 URI 方案?
"Native App" 示例中描述了我试图实现的概念:http://www.mobiloitte.com/blog/deep-linking-101
对于您的第一个问题,尝试使用 javascript window.navigator.userAgent
或 PHP 尝试使用 $_SERVER['HTTP_USER_AGENT']
。这应该独立于 Wordpress 或其他站点详细信息。查看相关问题 here and here.
关于你的第二个问题,深度链接是用于个别移动应用程序的,对吧?答案可能取决于您的目标应用程序。如果它是一个现有的应用程序,您可能会与应用程序开发人员联系以获得最佳牵引力。如果您正在编写新应用,则有 android here and for iOS here. If you want a permalink URL that refers to specific content on your Wordpress page (like a specific transaction event and user name) then you can find information about permalinks and query strings with WordPress, for example here 的信息。
首先,看看你是否在移动平台上,WP 有一个功能:wp_is_mobile
(参见 Codex page)。
然后,如果您查看 class-wc-download-handler.php
文件 (see here) 的源代码,第 177 行是一个 download( $file_path, $product_id )
函数。这在第 188 行使用 apply_filters( 'woocommerce_file_download_filename', $filename, $product_id )
生成下载路径,因此理论上,您应该能够连接到它并使用正则表达式将 http
替换为您的深 link uri。
希望对您有所帮助
以下代码在任何类型的下载方法之前运行,检查它是否是移动的并将下载 URL 中的 http
或 https
替换为 appname
,以及然后最终重定向到新的 URL。在这种情况下,最终的 URL 应该是这样的:
appname://domain.com/folder/filename.pdf
复制以下代码到functions.php
:
add_action( 'woocommerce_download_file_redirect', 'change_download_link_on_mobile' , 1, 2 );
add_action( 'woocommerce_download_file_xsendfile', 'change_download_link_on_mobile', 1, 2 );
add_action( 'woocommerce_download_file_force', 'change_download_link_on_mobile' , 1, 2 );
function change_download_link_on_mobile( $file_path, $filename = '' ){
if( wp_is_mobile () ){
$file_path = preg_replace( '/http|https/','appname', $file_path ); // Replace http|https with appname
header( 'Location: ' . $file_path );
exit();
}
}