如果特定产品 ID 有序,则触发 Woocommerce 自定义电子邮件,但如果其他产品在订单中,则不会触发

Woocommerce custom email is triggered if specific product ID is in order but not if other products are in the order

我的 Woocommerce 商店中有自定义 woocommerce 电子邮件触发功能。此电子邮件功能会根据产品元数据触发 2 封不同的电子邮件。如果特定产品元数据为空,它会触发 1 号电子邮件,如果它不为空,则会触发 2 号电子邮件。当我的订单中只有特定 ID 时,这非常有效。一旦订单中有其他产品,则不会触发此电子邮件。

这是代码部分

add_action('woocommerce_order_status_completed', 'send_a_custom_email', 20, 2 );

function send_a_custom_email( $order_id, $order ) {
    global $woocommerce;
    $order = new WC_Order( $order_id );
    $mailer = $woocommerce->mailer();
    $product_ids = array( ); // Initializing
    $customer_email = $order->get_billing_email();
    $customer_name = $order->get_billing_first_name();
    
    foreach ( $order->get_items() as $item ) {
        $meta_data  = $item->get_meta('meno'); // Zisti ake je meno
        $venovanie = $item->get_meta('venovanie'); // // Zisti ake je venovanie
        $product_id = $item->get_variation_id() ? $item->get_variation_id() : $item->get_product_id();
        
        if( empty($meta_data) ) {
            $product_ids[] = $item->get_variation_id() > 0 ? $item->get_variation_id() : $item->get_product_id();
        }
    } 

    if ( ! empty($product_ids) && $product_id == 2805 ) {

//email 1

} else if ( empty($product_ids) && $product_id == 2805 ) {

//email 2

}
}

如果我从函数中删除 $product_id == 2805,那么它会在商店中的每个订单中发送这封电子邮件,这也不好,因为只有当订单中的产品 ID 为 2805 时才必须触发这封电子邮件电子邮件 1 和电子邮件 2 基于此产品 ID 2805 元数据。

在此先感谢您的帮助。

<?php

add_action('woocommerce_order_status_completed', 'send_a_custom_email', 20, 2 );

function send_a_custom_email( $order_id, $order ) {
    global $woocommerce;
    $order = new WC_Order( $order_id );
    $mailer = $woocommerce->mailer();
    $product_ids = array( ); // Initializing
    $customer_email = $order->get_billing_email();
    $customer_name = $order->get_billing_first_name();
    
    foreach ( $order->get_items() as $item ) {
        $meta_data  = $item->get_meta('meno'); // Zisti ake je meno
        $venovanie = $item->get_meta('venovanie'); // // Zisti ake je venovanie
        $product_id = $item->get_variation_id() ? $item->get_variation_id() : $item->get_product_id();
        
        if( empty($meta_data) ) {
            $product_ids[] = $item->get_variation_id() > 0 ? $item->get_variation_id() : $item->get_product_id();
        }
    } 

    if ( count($product_ids)>0 && $product_id == 2805 ) {

//email 1

} else if ( empty($product_ids) && $product_id == 2805 ) {

//email 2

}
}

这解决了我的问题

add_action('woocommerce_order_status_completed', 'send_a_custom_email', 20, 2 );

function send_a_custom_email( $order_id, $order ) {
    global $woocommerce;
    $order = new WC_Order( $order_id );
    $mailer = $woocommerce->mailer();
    $product_ids = array( ); // Initializing
    $customer_email = $order->get_billing_email();
    $customer_name = $order->get_billing_first_name();
    
    foreach ( $order->get_items() as $item ) {
        $meta_data  = $item->get_meta('meno'); // Zisti ake je meno
        $venovanie = $item->get_meta('venovanie'); // // Zisti ake je venovanie
        $product_id = $item->get_variation_id() ? $item->get_variation_id() : $item->get_product_id();
        
        if( empty($meta_data) ) {
            $product_ids[] = $item->get_variation_id() > 0 ? $item->get_variation_id() : $item->get_product_id();
        }
    } 

if(( !empty($product_ids) && in_array( 2805, $product_ids)) || ( !empty($product_ids) && $product_id == 2805 )){

//email 1

} 
if(( empty($product_ids) && in_array( 2805, $product_ids)) || ( empty($product_ids) && $product_id == 2805 )){

//email 2

}
}