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

