Вы можете использовать 2 способа:
Вариант 1 - Использование ловушки фильтра (фильтрация по определенной конечной точке ) :
Фильтр woocommerce_customer_get_downloadable_products
находится внутри кода метода WC_CUstomer
get_downloadable_products()
.
Следующее даст вам 5 последних загрузок в определенной конечной точке (Здесь, в Моем Аккаунте> downloads
конечная точка) :
add_filter( 'woocommerce_customer_get_downloadable_products', 'filter_customer_downloadable_products', 10, 1 );
function filter_customer_downloadable_products( $downloads ) {
$limit = 5; // Number of downloads to keep
// Only on My account Downloads section for more than 5 downloads
if( is_wc_endpoint_url( 'downloads' ) && sizeof($downloads) > $limit ) {
$keys_by_order_id = $sorted_downloads = array();
$count = 0;
// Loop through the downloads array
foreach( $downloads as $key => $download ) {
// Store the array key with the order ID
$keys_by_order_id[$key] = $download['order_id'];
}
// Sorting the array by Order Ids in DESC order
arsort($keys_by_order_id);
// Loop through the sorted array
foreach( $keys_by_order_id as $key => $order_id ) {
// Set the corresponding download in a new array (sorted)
$sorted_downloads[] = $downloads[$key];
$count++; // Increase the count
// When the count reaches the limit
if( $count === $limit ) {
break; // We stop the loop
}
}
return $sorted_downloads;
}
return $downloads;
}
Код помещается в файл function.php вашей активной дочерней темы (или активной темы). Проверено и работает.
Вариант 2 - Использование пользовательской функции, которая фильтрует:
Просто используйте эту функцию, чтобы получить от клиента $downloads
переменную последние 5 загрузок.
Может использоваться где угодно.
function get_customer_latest_downloads( $downloads, $limit = 5 ) {
// Only on my account pages for more than 5 downloads
if( sizeof($downloads) > $limit ) {
$keys_by_order_id = $sorted_downloads = array();
$count = 0;
// Loop through the downloads array
foreach( $downloads as $key => $download ) {
// Store the array key with the order ID
$keys_by_order_id[$key] = $download['order_id'];
}
// Sorting the array by Order Ids in DESC order
arsort($keys_by_order_id);
// Loop through the sorted array
foreach( $keys_by_order_id as $key => $order_id ) {
// Set the corresponding download in a new array (sorted)
$sorted_downloads[] = $downloads[$key];
$count++; // Increase the count
// When the count reaches the limit
if( $count === $limit ) {
break; // We stop the loop
}
}
return $sorted_downloads;
}
return $downloads;
}
Код помещается в файл function.php вашей активной дочерней темы (или активной темы). Проверено и работает.
Пример использования (в шаблоне или шорткоде) :
<code>$downloads = WC()->customer->get_downloadable_products();
$downloads = get_customer_latest_downloads( $downloads ); // The 5 latest downloads
// Testing the array raw output
echo '<pre>'; print_r($downloads); echo '
';
Примечание: Хуки действий не фильтруют данные.