如何在EDD多卖家站点展示每个卖家的产品总下载量?
解决方案
要实现卖家所有产品的总下载量统计,需要替换原代码中调用购买量的逻辑,改为查询卖家所有产品并累加每个产品的下载次数。以下是修改后的完整代码及说明:
<?php if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } global $post; $author_id = 0; // 获取当前卖家ID if ( is_singular( 'download' ) ) { $author = new WP_User( $post->post_author ); $author_id = $author->ID; } else { $vendor = fes_get_vendor(); if ( $vendor ) { $author_id = $vendor->id; } } // fallback到当前用户ID(可选) if ( ! $author_id ) { $author_id = get_current_user_id(); } $vendor = new FES_Vendor( $author_id, true ); // 计算卖家所有产品的总下载量 $total_downloads = 0; // 查询卖家所有已发布的EDD产品(优化性能:只获取ID、跳过分页计数) $vendor_products = get_posts( array( 'post_type' => 'download', 'posts_per_page' => -1, 'post_status' => 'publish', 'author' => $author_id, 'fields' => 'ids', 'no_found_rows' => true, ) ); // 累加每个产品的下载次数 foreach ( $vendor_products as $product_id ) { $total_downloads += edd_get_download_count( $product_id ); } ?> <div class="total-downloads"> <span class="total-number"><?php echo esc_html( $total_downloads ); ?></span> <span class="total-text"><?php esc_html_e('Downloads','notisnal')?></span> </div>
关键修改点
- 修复变量类型问题:统一用
$author_id存储卖家ID,避免原代码中$author类型不一致导致的报错。 - 查询卖家产品:通过
get_posts筛选出该卖家所有已发布的EDD产品(post_type为download),并通过参数优化查询性能。 - 累加下载量:使用EDD内置函数
edd_get_download_count()获取单个产品的下载次数,循环累加得到总下载量。 - 替换输出内容:将原代码中显示购买量的
$vendor->sales_count替换为计算得到的$total_downloads。
可选优化:添加缓存
如果卖家产品较多,建议添加缓存减少重复计算,提升页面加载速度:
// 在计算总下载量前添加缓存逻辑 $cache_key = 'vendor_total_downloads_' . $author_id; $total_downloads = wp_cache_get( $cache_key ); if ( false === $total_downloads ) { $total_downloads = 0; $vendor_products = get_posts( array( 'post_type' => 'download', 'posts_per_page' => -1, 'post_status' => 'publish', 'author' => $author_id, 'fields' => 'ids', 'no_found_rows' => true, ) ); foreach ( $vendor_products as $product_id ) { $total_downloads += edd_get_download_count( $product_id ); } // 缓存1小时(3600秒) wp_cache_set( $cache_key, $total_downloads, '', 3600 ); }
内容的提问来源于stack exchange,提问作者Yudi
相关产品推荐
相关产品推荐

