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

如何在WooCommerce中通过已购产品ID获取对应订单ID?

获取已购特定产品的订单ID(WooCommerce)

嘿,咱们一步步来解决这个问题~先说说你之前的代码为啥跑不起来:

  • 第一段代码里new wc_get_order( $order_id )是错的,wc_get_order()本身就是WooCommerce的内置函数,不需要用new来实例化,直接调用就行;
  • 第二段代码里的get_order_ids_from_bought_items()根本不是WooCommerce自带的函数,自然会报错啦。

下面给你两种靠谱的解决方案,按需选用:

方法1:用WooCommerce内置函数查当前用户的订单

如果你要找当前登录用户买过指定产品的订单ID,用这个代码就很稳妥:

// 先定义你要找的产品ID数组
$target_product_ids = array(37, 53);
$user_id = get_current_user_id();

// 获取用户所有已完成的订单(可以根据需求调整订单状态)
$customer_orders = wc_get_orders(array(
    'customer_id' => $user_id,
    'status' => array('completed'), // 还能加'processing'、'on-hold'这些状态
    'limit' => -1, // 表示获取所有符合条件的订单
));

$matching_order_ids = array();

// 遍历每个订单,检查里面的商品
foreach ($customer_orders as $order) {
    foreach ($order->get_items() as $item) {
        $product_id = $item->get_product_id();
        // 如果当前商品ID在目标数组里,就记录订单ID
        if (in_array($product_id, $target_product_ids)) {
            $matching_order_ids[] = $order->get_id();
            break; // 避免同一个订单被重复添加
        }
    }
}

// 去重,防止同一订单有多个目标产品时重复记录
$matching_order_ids = array_unique($matching_order_ids);

// 输出结果,你可以根据需求改成echo或者其他处理方式
print_r($matching_order_ids);

方法2:直接查数据库(效率更高)

如果需要批量查询,或者不想依赖WooCommerce的函数(不推荐日常用,但特殊场景下可以),可以用WPDB直接查数据库:

global $wpdb;

$target_product_ids = array(37, 53);
$product_ids_str = implode(',', $target_product_ids);

// 从订单商品表中查询包含目标产品的订单ID
$order_ids = $wpdb->get_col(
    "SELECT DISTINCT order_id
     FROM {$wpdb->prefix}woocommerce_order_items AS order_items
     LEFT JOIN {$wpdb->prefix}woocommerce_order_itemmeta AS itemmeta ON order_items.order_item_id = itemmeta.order_item_id
     WHERE itemmeta.meta_key = '_product_id'
     AND itemmeta.meta_value IN ($product_ids_str)
     AND order_items.order_item_type = 'line_item'"
);

// 输出结果
print_r($order_ids);

小提醒

  • 如果要包含变体产品,记得在方法1里额外检查$item->get_variation_id(),把变体ID也加入判断;
  • 方法1里的status参数可以灵活调整,比如你想包含处理中的订单,就改成array('completed', 'processing');
  • 这些代码最好放在主题的functions.php里或者自定义插件中,不要直接在前端页面裸写哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:04:04