根据产品类别向 WooCommerce 通知添加电子邮件附件
Add an email attachment to WooCommerce notifications based on product category
对于我的一些产品,我需要向我的客户发送额外的 pdf(不是发票)。
在此post的帮助下:https://wordpress.org/support/topic/attach-pdf-to-confirmation-email-for-specific-product/
我能够在每封订单确认电子邮件中附加附件。
然后我尝试更改代码以按产品 sku 过滤。
在此 post 中,我找到了一些有关可用变量的信息,并阅读了有关 WP3 的一些更改:
不幸的是,我的代码不起作用,并且不再向确认电子邮件附加任何内容:
add_filter( 'woocommerce_email_attachments', 'webroom_attach_to_wc_emails', 10, 3);
function webroom_attach_to_wc_emails ( $attachments , $email_id, $order ) {
// Avoiding errors and problems
if ( ! is_a( $order, 'WC_Order' ) || ! isset( $email_id ) ) {
return $attachments;
}
$file_path = get_stylesheet_directory() . '/Lizenzen/TestAttachment.pdf';
$product_sku = '1234';
if( $email_id === 'customer_processing_order' ){
foreach ($order->get_items() as $item_key => $item ):
$product = $item->get_product();
if ( $product_sku === $product->get_sku() ) {
$attachments[] = $file_path;
}
endforeach;
}
return $attachments;
}
我如何更改它以检查产品类别而不是 SKU?
一个普遍的问题是:如何调试这个 php 代码?有没有办法显示例如email_id 等变量来检查代码是否获得正确的值?
以下代码根据
添加附件
- 产品类别
$email_id === 'customer_processing_order'
.
其他$email_ids
,见
还要确保文件路径正确!
- get_template_directory() - 检索当前主题的模板目录路径。
所以你得到:
function filter_woocommerce_email_attachments( $attachments, $email_id, $order, $email_object = null ) {
// Avoiding errors and problems
if ( ! is_a( $order, 'WC_Order' ) || ! isset( $email_id ) ) return $attachments;
// File path
$file_path = get_template_directory() . '/Lizenzen/TestAttachment.pdf';
// Specific categories, several could be added, separated by a comma
$specific_categories = array( 'Categorie-A', 'categorie-1' );
// Email id equal to (view:
if ( $email_id === 'customer_processing_order' ) {
// Loop through order items
foreach( $order->get_items() as $item ) {
// Product ID
$product_id = $item->get_variation_id() > 0 ? $item->get_variation_id() : $item->get_product_id();
// Has term (product category)
if ( has_term( $specific_categories, 'product_cat', $product_id ) ) {
// Push to array
$attachments[] = $file_path;
}
}
}
return $attachments;
}
add_filter( 'woocommerce_email_attachments', 'filter_woocommerce_email_attachments', 10, 4 );
对于我的一些产品,我需要向我的客户发送额外的 pdf(不是发票)。
在此post的帮助下:https://wordpress.org/support/topic/attach-pdf-to-confirmation-email-for-specific-product/
我能够在每封订单确认电子邮件中附加附件。 然后我尝试更改代码以按产品 sku 过滤。
在此 post 中,我找到了一些有关可用变量的信息,并阅读了有关 WP3 的一些更改:
不幸的是,我的代码不起作用,并且不再向确认电子邮件附加任何内容:
add_filter( 'woocommerce_email_attachments', 'webroom_attach_to_wc_emails', 10, 3);
function webroom_attach_to_wc_emails ( $attachments , $email_id, $order ) {
// Avoiding errors and problems
if ( ! is_a( $order, 'WC_Order' ) || ! isset( $email_id ) ) {
return $attachments;
}
$file_path = get_stylesheet_directory() . '/Lizenzen/TestAttachment.pdf';
$product_sku = '1234';
if( $email_id === 'customer_processing_order' ){
foreach ($order->get_items() as $item_key => $item ):
$product = $item->get_product();
if ( $product_sku === $product->get_sku() ) {
$attachments[] = $file_path;
}
endforeach;
}
return $attachments;
}
我如何更改它以检查产品类别而不是 SKU?
一个普遍的问题是:如何调试这个 php 代码?有没有办法显示例如email_id 等变量来检查代码是否获得正确的值?
以下代码根据
添加附件- 产品类别
$email_id === 'customer_processing_order'
.
其他$email_ids
,见
还要确保文件路径正确!
- get_template_directory() - 检索当前主题的模板目录路径。
所以你得到:
function filter_woocommerce_email_attachments( $attachments, $email_id, $order, $email_object = null ) {
// Avoiding errors and problems
if ( ! is_a( $order, 'WC_Order' ) || ! isset( $email_id ) ) return $attachments;
// File path
$file_path = get_template_directory() . '/Lizenzen/TestAttachment.pdf';
// Specific categories, several could be added, separated by a comma
$specific_categories = array( 'Categorie-A', 'categorie-1' );
// Email id equal to (view:
if ( $email_id === 'customer_processing_order' ) {
// Loop through order items
foreach( $order->get_items() as $item ) {
// Product ID
$product_id = $item->get_variation_id() > 0 ? $item->get_variation_id() : $item->get_product_id();
// Has term (product category)
if ( has_term( $specific_categories, 'product_cat', $product_id ) ) {
// Push to array
$attachments[] = $file_path;
}
}
}
return $attachments;
}
add_filter( 'woocommerce_email_attachments', 'filter_woocommerce_email_attachments', 10, 4 );