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

