如何在Woocommerce中基于收藏计数展示热门拍卖商品
修正并增强热门收藏拍卖商品功能
首先,你的原始SQL查询存在逻辑错误:usermeta表中并没有_auction_watch列,该值是存储在meta_key字段中的键名,对应的商品ID实际存放在meta_value字段里。我们需要先修正查询逻辑,再关联商品信息完成展示。
修正后的获取热门收藏商品函数
<?php /** * 获取最热门的收藏拍卖商品及其收藏次数 * * @return array 包含商品ID、收藏次数、标题、链接、图片URL的数组 */ function getMostWatchedAuctions() { global $wpdb; // 修正SQL查询:筛选meta_key为_auction_watch的记录,按商品ID分组统计收藏次数 $query = " SELECT meta_value AS product_id, COUNT(*) AS watch_count FROM {$wpdb->prefix}usermeta WHERE meta_key = '_auction_watch' GROUP BY meta_value ORDER BY watch_count DESC LIMIT 10; -- 可根据需求调整显示数量 "; $results = $wpdb->get_results($query, ARRAY_A); $mostWatched = []; foreach ($results as $item) { $productId = intval($item['product_id']); // 使用WooCommerce官方函数获取商品对象,确保兼容性 $product = wc_get_product($productId); // 跳过已删除或未发布的无效商品 if (!$product || $product->get_status() !== 'publish') { continue; } $mostWatched[] = [ 'product_id' => $productId, 'watch_count' => $item['watch_count'], 'title' => $product->get_name(), 'permalink' => $product->get_permalink(), 'image_url' => $product->get_image_url('woocommerce_thumbnail'), // 使用店铺设置的缩略图尺寸 ]; } return $mostWatched; }
展示热门收藏商品的模板代码
将以下代码添加到主题模板文件(如home.php、archive.php或自定义页面模板)中,即可渲染「最热门收藏商品」板块:
<?php // 调用函数获取热门商品数据 $mostWatchedAuctions = getMostWatchedAuctions(); if (empty($mostWatchedAuctions)) { echo '<p>暂无热门收藏拍卖商品</p>'; } else { ?> <div class="most-watched-auctions"> <h2>最热门收藏商品</h2> <div class="auctions-grid"> <?php foreach ($mostWatchedAuctions as $auction) : ?> <div class="auction-item"> <a href="<?php echo esc_url($auction['permalink']); ?>" title="<?php echo esc_attr($auction['title']); ?>"> <img src="<?php echo esc_url($auction['image_url']); ?>" alt="<?php echo esc_attr($auction['title']); ?>" /> <h3><?php echo esc_html($auction['title']); ?></h3> </a> <p class="watch-count">收藏次数:<?php echo esc_html($auction['watch_count']); ?></p> </div> <?php endforeach; ?> </div> </div> <?php } ?>
关键说明
- SQL查询修正:通过
WHERE meta_key = '_auction_watch'筛选所有收藏记录,按meta_value(商品ID)分组,用COUNT(*)统计每个商品的收藏人数。 - 商品信息获取:使用
wc_get_product()函数获取商品对象,避免直接操作数据库带来的兼容性问题,适配WooCommerce的各种商品类型。 - 安全输出:使用
esc_url()、esc_html()等函数对输出内容转义,防止XSS攻击。 - 图片尺寸:
get_image_url('woocommerce_thumbnail')使用默认缩略图尺寸,可替换为woocommerce_single、woocommerce_gallery_thumbnail或自定义尺寸名称。
内容的提问来源于stack exchange,提问作者TechMistress
相关产品推荐
相关产品推荐

