在订单部分,可下载产品的下载链接如下:
http://localhost/?download_file=2922&order=wc_order_3av4Ev4PlUyLw&uid=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855&key=2a89e5ba-4203-4596-8e5b-04b7f66cbb79
但在下载部分,下载链接如下 - 需要电子邮件,否则文件将无法下载并显示错误:
http://localhost/wp/?download_file=2922&order=wc_order_3av4Ev4PlUyLw&email&key=2a89e5ba-4203-4596-8e5b-04b7f66cbb79
订购部分代码:
$order = wc_get_order( 12 );
$downloads = $order->get_downloadable_items();
下载部分代码:
$downloads = wc_get_customer_available_downloads($user_id);
因为我的大多数用户没有注册他们的电子邮件,这就是他们遇到问题的原因。我希望它像订单链接一样显示在下载链接中。
您可以使用
woocommerce_customer_get_downloadable_products
过滤器挂钩对客户我的帐户下载进行更改。
由于您希望获得与从客户单订单视图访问的下载链接相同的下载链接结构,我们可以查询所有客户订单,使用
get_downloadable_items()
方法获取每个订单的下载并合并它们,以替换 wc_get_customer_available_downloads()
功能。
这是代码:
add_filter( 'woocommerce_customer_get_downloadable_products', 'alter_customer_downloads_links', 10, 1 );
function alter_customer_downloads_links( $downloads ) {
// Only on front-end my account downloads
if ( ! is_wc_endpoint_url('downloads') ) {
return $downloads;
}
// Get customer orders
$customer_orders = wc_get_orders( array(
'limit' => -1,
'customer' => get_current_user_id(),
'status' => wc_get_is_paid_statuses(),
) );
$downloads = array(); // Reset downloads
foreach($customer_orders as $order ) {
// Merge downloadable items
$downloads = array_merge( $downloads, $order->get_downloadable_items() );
}
return $downloads;
}
代码位于子主题的functions.php 文件中(或插件中)。已测试并有效。