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

获取指定商品ID最新购买日期的WooCommerce查询函数报错求助

获取WooCommerce指定商品最新购买日期的修正方案

原代码存在的问题

  1. 无效查询参数:WC_Order_Query不支持直接传入product_id参数,无法正确筛选包含指定商品的订单。
  2. 错误的订单对象处理:get_orders()返回的是WC_Order对象数组,而非订单ID,原代码中调用wc_get_order($order_id)会因为参数类型错误导致报错。
  3. 过时的日期调用方式:$order->order_date是WooCommerce旧版本的属性,3.0+版本应使用官方提供的日期方法,直接调用会出现未定义属性或返回非预期值的问题。
  4. 性能冗余:posts_per_page => -1会加载所有符合条件的订单,完全没必要——我们只需要最新的一条。

修正后的代码

function check_date_purchased($product_id){ 
    $args = array(
        'limit' => 1, // 仅获取最新1条订单,提升查询效率
        'line_items' => array(
            array(
                'product_id' => $product_id, // 精准筛选包含目标商品的订单
            ),
        ),
        'orderby' => 'date',
        'order' => 'DESC',
        'status' => 'completed',
    );

    $query = new WC_Order_Query( $args );
    $orders = $query->get_orders();

    if ( ! empty( $orders ) ) {
        $latest_order = reset( $orders );
        // 返回格式化的订单完成日期,若需订单创建日期可替换为get_date_created()
        return $latest_order->get_date_completed()->format( 'Y-m-d H:i:s' );
    }

    return false;
}

echo check_date_purchased( 8070 );

关键改进说明

  • 用line_items参数替代无效的product_id,实现精准筛选包含指定商品的订单。
  • 设置limit => 1减少数据库查询量,直接获取最新订单,避免不必要的循环遍历。
  • 直接使用get_orders()返回的WC_Order对象,省略冗余的wc_get_order()调用。
  • 使用get_date_completed()->format()获取标准格式的日期字符串,适配WooCommerce新版本API规范。
  • 简化逻辑,通过reset($orders)直接提取最新订单,无需嵌套循环判断商品ID。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 22:05:29