避免针对 Woocommerce 中特定产品类别的客户电子邮件通知 [英] Avoid customer email notification for a specific product category in Woocommerce
本文介绍了避免针对 Woocommerce 中特定产品类别的客户电子邮件通知的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在 Woocommerce 中,我试图阻止 woocommerce 中特定产品类别的客户订单电子邮件.
In Woocommerce, I am trying to stop customer order email for a particular product category in woocommerce.
我尝试过的是:
add_filter('woocommerce_email_recipient_customer_processing_order', 'wc_change_customer_new_order_email_recipient', 10, 3);
function wc_change_customer_new_order_email_recipient( $recipient, $order ) {
global $woocommerce;
$items = $order->get_items();
$category_ids = array( 10 );
$flagHasProduct = false;
foreach ( $items as $item ) {
$product_id = $item['product_id'];
$terms = get_the_terms( $product_id, 'product_cat' );
foreach ( $terms as $term ) {
if( in_array( $term->term_id, $category_ids ) ) {
$flagHasProduct = true;
}
}
}
if ($flagHasProduct) {
$recipient = "";
}
$recipient = "";
return $recipient;
}
但是这个钩子根本不起作用.任何帮助表示赞赏.
But this hook is not working at all. Any help is appreciated.
推荐答案
你应该试试这个(使用 has_term()
WP 条件函数):
You should try this instead (with has_term()
WP conditional function):
add_filter( 'woocommerce_email_recipient_customer_processing_order', 'product_cat_avoid_processing_email_notification', 10, 2 );
function product_cat_avoid_processing_email_notification( $recipient, $order ) {
if( is_admin() ) return $recipient;
// HERE set your product categories (coma separated term Ids, slugs or names)
$product_categories = array( 10 );
// Loop through order items
foreach ( $order->get_items() as $item ) {
// Get an instance of the WC_Product object
$product = $item->get_product();
// Get the correct product ID (for variations we take the parent product ID)
$product_id = $product->is_type('variation') ? $product->get_parent_id() : $product->get_id();
// Check for product categories for this item
if( has_term( $product_categories, 'product_cat', $product_id ) )
return ''; // If it's found, we return an empty recipient
}
return $recipient;
}
此代码位于活动子主题(或主题)的 function.php 文件中.经过测试并有效.
这将避免仅客户处理"订单电子邮件通知.
对于其他客户订单电子邮件通知,您还必须添加:
// Customer "completed" Order email notification
add_filter( 'woocommerce_email_recipient_customer_completed_order', 'product_cat_avoid_processing_email_notification', 10, 2 );
// Customer "on-hold" Order email notification
add_filter( 'woocommerce_email_recipient_customer_on_hold_order', 'product_cat_avoid_processing_email_notification', 10, 2 );
// Customer "refunded" Order email notification
add_filter( 'woocommerce_email_recipient_customer_refunded_order', 'product_cat_avoid_processing_email_notification', 10, 2 );
// Customer "invoice" email notification
add_filter( 'woocommerce_email_recipient_customer_invoice', 'product_cat_avoid_processing_email_notification', 10, 2 );
<小时>
- 如何获取 WooCommerce 订单详情
- 获取订单商品和 Woocommerce 3 中的 WC_Order_Item_Product
- Wordpress has_term() 函数(用于自定义分类作为条件标签)
这篇关于避免针对 Woocommerce 中特定产品类别的客户电子邮件通知的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文