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

WooCommerce如何在商品页展示用户购买指定商品的历史订单

WooCommerce商品详情页显示用户自身购买该商品历史记录实现方案

无需安装额外插件,通过主题函数文件添加代码即可实现需求,最终展示结构和给出的示例一致,仅对登录用户开放查看权限,展示字段包含下单日期、购买数量、成交价格。

操作步骤

  • 登录WordPress后台,进入「外观 → 主题文件编辑器」,选中当前正在使用的主题/子主题,找到右侧的functions.php文件
  • 将下方提供的代码粘贴到functions.php文件的最末尾,点击保存文件即可生效

实现代码

// 在商品详情页加入购物车按钮下方显示当前用户的该商品购买记录
add_action('woocommerce_after_add_to_cart_form', 'display_user_product_purchase_history', 15);
function display_user_product_purchase_history() {
    // 未登录用户不显示内容
    if (!is_user_logged_in()) {
        echo '<p class="purchase-history-notice">*请登录后查看您的该商品购买记录*</p>';
        return;
    }
    global $product;
    $current_product_id = $product->get_id();
    $current_user_id = get_current_user_id();

    // 获取当前用户所有已支付/处理中的有效订单
    $customer_orders = wc_get_orders([
        'customer_id' => $current_user_id,
        'status' => ['wc-completed', 'wc-processing'], // 排除已取消、待支付、退款订单
        'limit' => -1,
    ]);

    $purchase_records = [];
    // 遍历订单筛选当前商品的购买记录
    foreach ($customer_orders as $order) {
        foreach ($order->get_items() as $item) {
            if ($item->get_product_id() == $current_product_id) {
                $purchase_records[] = [
                    'date' => $order->get_date_created()->date('d.m.Y'), // 日期格式和示例保持一致,可自行修改
                    'qty' => $item->get_quantity(),
                    'price' => wc_price($item->get_subtotal() / $item->get_quantity()), // 计算当时的实际成交单价
                ];
            }
        }
    }

    // 输出记录模块
    if (!empty($purchase_records)) {
        echo '<div class="product-purchase-history" style="margin-top: 30px;">';
        echo '<h4>LAST ORDER</h4>';
        echo '<table style="width: 100%; border-collapse: collapse;">';
        echo '<thead><tr>';
        echo '<th style="text-align: left; padding: 8px; border-bottom: 1px solid #eee;">DATE</th>';
        echo '<th style="text-align: left; padding: 8px; border-bottom: 1px solid #eee;">QUT.</th>';
        echo '<th style="text-align: left; padding: 8px; border-bottom: 1px solid #eee;">PRICE</th>';
        echo '</tr></thead><tbody>';
        foreach ($purchase_records as $record) {
            echo '<tr>';
            echo '<td style="padding: 8px; border-bottom: 1px solid #f5f5f5;">' . esc_html($record['date']) . '</td>';
            echo '<td style="padding: 8px; border-bottom: 1px solid #f5f5f5;">' . esc_html($record['qty']) . '</td>';
            echo '<td style="padding: 8px; border-bottom: 1px solid #f5f5f5;">' . $record['price'] . '</td>';
            echo '</tr>';
        }
        echo '</tbody></table></div>';
    }
}

自定义调整说明

  • 模块位置调整:如果要把历史记录模块放到商品详情页其他位置,替换代码里的woocommerce_after_add_to_cart_form钩子即可,比如放到商品详情末尾用woocommerce_after_single_product_summary,调整钩子后的优先级数字(代码里是15)可以控制模块上下排序
  • 日期格式调整:修改代码里date('d.m.Y')的参数即可,比如要显示「年-月-日」格式改成date('Y-m-d')
  • 订单范围调整:如果要显示待支付、已取消等状态的订单,在status参数里补充对应订单状态标识即可
  • 样式调整:可以自行修改代码里表格的内联样式,或者写到主题CSS文件里美化展示效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 05:00:44