gpt4 book ai didi

php - 如何使用 PHP 代码或 Shotcode 显示 WooCommerce 下载表

转载 作者:行者123 更新时间:2023-12-04 13:19:17 28 4
gpt4 key购买 nike

我正在尝试在仪表板端点上显示 woocommerce 下载表。在研究了 woocommerce 下载端点文件后,我注意到 woocommerce 使用下面的代码来显示下载表;

$downloads     = WC()->customer->get_downloadable_products();
$has_downloads = (bool) $downloads;

do_action( 'woocommerce_before_account_downloads', $has_downloads ); ?>

<?php if ( $has_downloads ) : ?>

<?php do_action( 'woocommerce_before_available_downloads' ); ?>

<?php do_action( 'woocommerce_available_downloads', $downloads ); ?>

<?php do_action( 'woocommerce_after_available_downloads' ); ?>

<?php else : ?>
<div class="woocommerce-Message woocommerce-Message--info woocommerce-info">
<a class="woocommerce-Button button" href="<?php echo esc_url( apply_filters( 'woocommerce_return_to_shop_redirect', wc_get_page_permalink( 'shop' ) ) ); ?>">
<?php esc_html_e( 'Go shop', 'woocommerce' ); ?>
</a>
<?php esc_html_e( 'No downloads available yet.', 'woocommerce' ); ?>
</div>
<?php endif; ?>

<?php do_action( 'woocommerce_after_account_downloads', $has_downloads ); ?>

我想实现的是以表格形式显示最近5次下载。想知道如何限制这个 Action <?php do_action( 'woocommerce_available_downloads', $downloads ); ?>仅显示最新的 5 个下载。

更新

这是 Woocommerce 下载端点页面中的下载表 enter image description here

我想在仪表板端点页面上显示完全相同的表结构

enter image description here

最佳答案

您可以使用两种方式:

选项 1 - 使用过滤器钩子(Hook) (在特定端点上过滤):

The filter woocommerce_customer_get_downloadable_products is located inside the code from WC_CUstomer get_downloadable_products() method.

以下内容将为您提供特定端点 (在我的帐户上 > 下载 端点) 中的 5 个最新下载:

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 文件。经过测试并有效。

用法示例 (在模板或短代码中):

$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 '</pre>';

注意:操作 Hook 不会过滤数据。

关于php - 如何使用 PHP 代码或 Shotcode 显示 WooCommerce 下载表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55929311/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com