You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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
}
?>

关键说明

  1. SQL查询修正:通过WHERE meta_key = '_auction_watch'筛选所有收藏记录,按meta_value(商品ID)分组,用COUNT(*)统计每个商品的收藏人数。
  2. 商品信息获取:使用wc_get_product()函数获取商品对象,避免直接操作数据库带来的兼容性问题,适配WooCommerce的各种商品类型。
  3. 安全输出:使用esc_url()、esc_html()等函数对输出内容转义,防止XSS攻击。
  4. 图片尺寸:get_image_url('woocommerce_thumbnail')使用默认缩略图尺寸,可替换为woocommerce_single、woocommerce_gallery_thumbnail或自定义尺寸名称。

内容的提问来源于stack exchange,提问作者TechMistress

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 04:47:09