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

WooCommerce如何扩展代码获取多笔订单的用户最近10件已购商品

多笔订单拉取实现方案

直接替换原有单订单查询逻辑即可,核心是按时间倒序拉取用户有效历史订单,逐笔提取商品,去重后累计到10件最近购买的商品就终止遍历,同时预留了排除购物车已有商品的扩展位。

// 仅登录用户可访问
if ( is_user_logged_in() ) {
    $user_id = get_current_user_id();
    $target_count = 10; // 需要展示的历史商品数量
    $recent_products = array();

    // 查询用户最近10笔有效订单,按下单时间倒序排列
    $orders = wc_get_orders([
        'customer_id' => $user_id,
        'status' => ['wc-completed', 'wc-processing'], // 排除取消、退款、失败的无效订单
        'limit' => 10,
        'orderby' => 'date',
        'order' => 'DESC',
        'return' => 'objects'
    ]);

    if (!empty($orders)) {
        foreach ($orders as $order) {
            // 凑够目标数量直接停止遍历订单
            if (count($recent_products) >= $target_count) break;

            foreach ($order->get_items() as $item) {
                $pid = $item->get_product_id();
                // 同个商品仅保留最近一次购买记录,自动去重
                if (!isset($recent_products[$pid])) {
                    // 后续排除购物车商品逻辑在此处增加判断:若商品ID存在于当前购物车则跳过
                    $recent_products[$pid] = $pid;
                }
                // 凑够目标数量直接停止遍历商品
                if (count($recent_products) >= $target_count) break;
            }
        }
    }

    // 以下为调试输出,正式上线可删除
    if (!empty($recent_products)) {
        echo '<pre>';
        var_dump(array_values($recent_products));
        echo '</pre>';
    }
}

逻辑说明

  • 默认查询最近10笔有效订单,足够覆盖绝大多数场景凑齐10件不同商品的需求,不会产生冗余查询影响性能
  • 自动做商品去重,同一商品多次下单仅保留最近一次的记录,不会重复展示
  • 双重提前终止判断:累计商品数达到目标值后立刻停止遍历,不需要处理完所有查询到的订单数据,执行效率更高
  • 预留了排除购物车商品的逻辑位置,后续只需先获取当前购物车的商品ID列表,在商品入列时增加跳过判断即可实现对应功能

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 15:39:16