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
相关产品推荐
相关产品推荐

