2017-02-22 28 views
1

我试图附上PDF格式的订单响应,其中pdf格式为“sku.pdf”使用此代码;get_product_from_item()错误与woocommerce_email_attachments钩

add_filter('woocommerce_email_attachments', 'woocommerce_attachments_filter', 10, 3); 

function woocommerce_attachments_filter ($attachments, $status , $order, $sent_to_admin) { 

    if (! $sent_to_admin) { 

      $order_items = $order->get_items(); 

      foreach ($order_items as $item) { // loop through order items 

       $_product = $item->get_product_from_item($item); 
       $sku = $_product->get_sku(); 

       $pdf_download = 'downloads/'.$sku.'.pdf'; 
       $attachments[] = $pdf_download; 
       //$joining_instructions = 'downloads/W611.pdf'; 
       //$attachments[] = $joining_instructions; 
      } 
    } 

return $attachments; 
} 

不幸的是它抛出错误“语法错误:JSON解析错误:无法识别的记号‘<’” - 显然是从线$_product = $item->get_product_from_item($item);

我要去哪里错了?

(注释行是据我顺利拿到,即附件代码工作)

+0

有,也有一些我不明白的PDF路径。下载目录位于Web服务器的根目录下。所以'/ downloads/W611.pdf'是正确的路径。如果我这样做,我会得到一个空的pdf。如果我删除了原始斜杠,因此'downloads/W611.pdf',pdf已正确传递。 –

回答

1

而不是使用get_product_from_item(),因为你可以很容易地和直接的产品ID,您可以使用wc_get_product()拿到$产品对象的实例...

这里是你的功能代码:

add_filter('woocommerce_email_attachments', 'woocommerce_attachments_filter', 10, 4); 
function woocommerce_attachments_filter ($attachments, $status , $order, $sent_to_admin) { 

    if (! $sent_to_admin) { 

     foreach ($order->get_items() as $item) { // loop through order items 

      $product = wc_get_product($item['product_id']); 
      $sku = $product->get_sku(); 

      $pdf_download = 'downloads/'.$sku.'.pdf'; 
      $attachments[] = $pdf_download; 
      //$joining_instructions = 'downloads/W611.pdf'; 
      //$attachments[] = $joining_instructions; 
     } 
    } 
    return $attachments; 
} 

阿尔斯o在你的add_action()中,你需要在这里输入正确数量的参数。如果没有,$sent_to_admin可能会被忽略,或者你可能有一些错误或错误...

+0

确实是这样,谢谢Mr Loic –

+0

对不起!忘记。这是一个“教他钓鱼......”的案例。 (我去钓鱼;-) –