对于那些希望通过
WC()->customer->get_downloadable_products()
功能按产品 ID 对返回的可下载项目进行分组的任何人。
下面的代码片段修改了函数
WC()->customer->get_downloadable_products()
的返回数据,以按产品 ID 对可下载文件进行分组。
/**
* Group Downloadable products by product ID
*
* @param array $downloads
* @return array
*/
function prefix_group_downloadable_products( array $downloads ) {
$unique_downloads = [];
foreach ( $downloads as $download ) {
$list = [
'download_url' => $download['download_url'],
'file_name' => $download['file']['name']
];
if ( array_key_exists( $download['product_id'], $unique_downloads ) ) {
$unique_downloads[ $download['product_id'] ]['list'][] = $list;
continue;
}
$data = $download;
$data['list'] = [ $list ];
$unique_downloads[ $download['product_id'] ] = $data;
}
return $unique_downloads;
}
add_filter( 'woocommerce_customer_get_downloadable_products',
'prefix_group_downloadable_products' );
过滤器就位后,使用过滤器挂钩
woocommerce_account_downloads_column_download-file
修改布局以在有序列表中列出可下载文件。
/**
* Show number list of downloadable files for group product
*
* @param array $download
* @return void
*/
function prefix_downloads_column_download_file( array $download ) {
$lists = $download['list'];
if ( empty( $lists ) ) {
_e( 'No Download Files', 'storefront' );
return;
}
echo '<ol>';
foreach ( $lists as $list ) {
echo '<li>';
echo '<a href="' . esc_url( $list['download_url'] ) . '" class="woocommerce-MyAccount-downloads-file">';
echo esc_html( $list['file_name'] );
echo '</a></li>';
}
echo '</ol>';
}
add_action( 'woocommerce_account_downloads_column_download-file', 'prefix_downloads_column_download_file' );
这里需要注意的是,原始下载文件数组的数据结构没有改变,我们只是引入了一个新的键
list[]
,它在list
键中保存每个可下载文件的URL和名称。
我使用了上面的代码,它在下载页面中工作正常,但是在下载部分的订单页面以及下载部分的订单报告页面上出现此错误:
警告:第 156 行 /home/beatop/domains/sdrecords.ir/public_html/wp-content/themes/hello-theme-child-master/functions.php 中未定义的数组键“list” 没有下载文件
第 156 行是上面代码中的:
$lists = $download['list'];
如果有人告诉我如何解决这个问题,我将不胜感激。
向大家致以最美好的祝愿