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

WooCommerce HPOS环境下新老客户装箱单消息显示异常的代码问题

解决WooCommerce HPOS下无法识别老客户订单的问题

你的代码问题出在HPOS(高性能订单存储)启用后,订单不再以自定义帖子类型存储在wp_posts表中,原来用get_posts基于post meta的查询方式完全找不到历史订单,所以$customer_orders永远为空,导致所有订单都显示“New Customer”。

下面是适配HPOS的修正代码,使用WooCommerce官方推荐的WC_Order_Query来查询订单,自动兼容HPOS和传统订单存储模式:

function action_wpo_wcpdf_after_document_label( $wpo_wcpdf_export_template_type, $order ) { 
    // 仅在装箱单模板执行
    if ('packing-slip' !== $wpo_wcpdf_export_template_type) { 
        return; 
    }

    $billing_email = $order->get_billing_email();
    if (empty($billing_email)) {
        return;
    }

    // 使用WC_Order_Query查询历史订单,兼容HPOS
    $order_query = new WC_Order_Query(array(
        'limit'        => -1,
        'exclude'      => array($order->get_id()), // 排除当前订单
        'billing_email'=> $billing_email,          // 按账单邮箱筛选
        'status'       => array_keys(wc_get_order_statuses()), // 包含所有状态的订单
        'return'       => 'ids',                   // 只返回订单ID,提升性能
    ));
    $customer_orders = $order_query->get_orders();

    // 输出对应标识
    $style = 'font-weight: bold;margin-top: -60px;border: 1px solid;width: 90px;padding: 3px 10px 5px 10px;line-height: 1;text-align: center;';
    if (empty($customer_orders)) {
        echo '<p class="form-field form-field-wide" style="' . esc_attr($style) . '">New Customer</p>';
    } else {
        echo '<p class="form-field form-field-wide" style="' . esc_attr($style) . '">Existing Customer</p>';
    }
} 
add_action( 'wpo_wcpdf_after_document_label', 'action_wpo_wcpdf_after_document_label', 10, 2 ); 

关键改动说明:

  • 替换get_posts为WC_Order_Query:这是WooCommerce官方提供的订单查询类,会自动识别当前是否启用HPOS,从正确的数据源获取订单数据
  • 使用billing_email参数直接筛选:无需依赖post meta,查询更精准高效
  • 设置return => 'ids':只返回订单ID数组,比返回完整订单对象更节省资源
  • 用esc_attr()转义样式属性:避免潜在的XSS风险,符合WordPress编码规范

测试时可以分别找新客户(无历史订单)和老客户(有历史订单)的订单生成装箱单,确认标识显示正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 16:10:02