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

WooCommerce自定义PDF插件问题:无法获取订单商品项数据

解决WooCommerce插件无法获取订单项数据的问题

先排查几个关键问题,再给出修正后的代码:

1. 先确认核心对象与数据是否有效

在代码开头添加调试日志,验证$order对象和订单项数组是否存在:

// 验证WC_Order对象是否有效
if ( ! $order ) {
    error_log('订单项调试:无效的WC_Order对象,订单ID:' . $order_id);
    return;
}

// 验证订单项数组是否为空(指定只获取产品类订单项)
$items = $order->get_items('line_item');
if ( empty($items) ) {
    error_log('订单项调试:当前订单无产品项,订单ID:' . $order_id);
    return;
}
error_log('订单项调试:获取到' . count($items) . '个产品项');

2. 修正代码中的字符串拼接错误

你原代码里的字符串拼接写法有误,双引号内用单引号包裹变量会导致变量无法解析,改为以下两种写法之一:

  • 用双引号直接解析变量:
$pdf->Cell(0, 10, "Product name: $product_name | Quantity: $item_quantity", 0, 1);
  • 用单引号正确拼接:
$pdf->Cell(0, 10, 'Product name: ' . $product_name . ' | Quantity: ' . $item_quantity, 0, 1);

3. 确保钩子触发时机正确

如果是用户下单时生成PDF,必须确保在订单完全保存到数据库后再执行代码。推荐使用woocommerce_checkout_order_processed钩子,而非更早的钩子(比如woocommerce_before_checkout_process):

add_action('woocommerce_checkout_order_processed', 'generate_pdf_picking_list', 10, 3);
function generate_pdf_picking_list($order_id, $posted_data, $order) {
    // 你的PDF生成代码放在这里
    // ...
}

修正后的完整代码片段

// 获取WC_Order对象
$order = wc_get_order( $order_id );

// 验证对象有效性
if ( ! $order ) {
    error_log('无效订单ID:' . $order_id);
    return;
}

// 遍历产品类订单项
foreach ( $order->get_items('line_item') as $item_id => $item ) {
    // 记录调试日志,确认循环是否执行
    error_log('订单项ID:' . $item_id . ',商品名称:' . $item->get_name() . ',数量:' . $item->get_quantity());

    $product        = $item->get_product();
    $product_name   = $item->get_name();
    $item_quantity  = $item->get_quantity();

    // 写入PDF(修正拼接写法)
    $pdf->Cell(0, 10, "Product name: $product_name | Quantity: $item_quantity", 0, 1);
}

额外排查点

  • 检查订单是否真的包含产品项:在WooCommerce后台查看对应订单,确认有商品存在
  • 确认当前用户权限:如果是后台触发,确保代码执行时具有足够的权限读取订单数据

内容的提问来源于stack exchange,提问作者Stan Williams 04

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 21:52:55