wordpress 避免在Woocommerce中为特定产品类别发送客户电子邮件通知

3ks5zfa0  于 2022-11-02  发布在  WordPress
关注(0)|答案(1)|浏览(122)

在Woocommerce中,我试图阻止客户在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;
}

但是这个钩子根本不起作用,任何帮助都不胜感激。

kmpatx3s

kmpatx3s1#

您应该试试这个 (使用has_term() WP条件函数)

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

相关问题