get_product_from_item() 错误与 woocommerce_email_attachments 挂钩

get_product_from_item() error with woocommerce_email_attachments hook

我正在尝试使用此代码将 pdf 附加到订单响应,其中 pdf 的格式为 "sku.pdf";

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; 
}

不幸的是,它抛出了错误 "SyntaxError: JSON Parse error: Unrecognized token '<'" - 显然来自行 $_product = $item->get_product_from_item($item);

我哪里错了?

(注释行是我成功的,即附件代码有效)

不使用 get_product_from_item(),因为您可以轻松直接地获取产品 ID,您可以使用 wc_get_product() 获取 $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; 
}

同样在您的 add_action() 中,您需要在此处输入正确数量的参数,即 4。如果不是,$sent_to_admin 可能会被忽略,或者您可能会遇到一些错误或错误......