Пользовательское электронное письмо Woocommerce запускается, если в заказе указан конкретный идентификатор продукта, но не в том случае, если в заказе есть другие продукты

#php #wordpress #woocommerce

#php #wordpress #woocommerce

Вопрос:

У меня есть пользовательская функция запуска электронной почты woocommerce в моем магазине Woocommerce. Эта функция электронной почты запускает 2 разных электронных письма на основе метаданных продукта. Если мета конкретного продукта пуста, это вызывает сообщение электронной почты № 1, а если оно не пустое, оно вызывает сообщение электронной почты № 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-gt;mailer();  $product_ids = array( ); // Initializing  $customer_email = $order-gt;get_billing_email();  $customer_name = $order-gt;get_billing_first_name();    foreach ( $order-gt;get_items() as $item ) {  $meta_data = $item-gt;get_meta('meno'); // Zisti ake je meno  $venovanie = $item-gt;get_meta('venovanie'); // // Zisti ake je venovanie  $product_id = $item-gt;get_variation_id() ? $item-gt;get_variation_id() : $item-gt;get_product_id();    if( empty($meta_data) ) {  $product_ids[] = $item-gt;get_variation_id() gt; 0 ? $item-gt;get_variation_id() : $item-gt;get_product_id();  }  }    if ( ! empty($product_ids) amp;amp; $product_id == 2805 ) {  //email 1  } else if ( empty($product_ids) amp;amp; $product_id == 2805 ) {  //email 2  } }  

Если я удалю функцию $product_id == 2805 из функции, она отправит это электронное письмо с каждым заказом в магазине, что также нехорошо, потому что это электронное письмо должно запускаться только тогда, когда в заказе указан идентификатор продукта 2805, а электронная почта 1 и электронная почта 2 основаны на метаданных этого идентификатора продукта 2805.

Заранее спасибо за вашу помощь.

Ответ №1:

 lt;?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-gt;mailer();  $product_ids = array( ); // Initializing  $customer_email = $order-gt;get_billing_email();  $customer_name = $order-gt;get_billing_first_name();    foreach ( $order-gt;get_items() as $item ) {  $meta_data = $item-gt;get_meta('meno'); // Zisti ake je meno  $venovanie = $item-gt;get_meta('venovanie'); // // Zisti ake je venovanie  $product_id = $item-gt;get_variation_id() ? $item-gt;get_variation_id() : $item-gt;get_product_id();    if( empty($meta_data) ) {  $product_ids[] = $item-gt;get_variation_id() gt; 0 ? $item-gt;get_variation_id() : $item-gt;get_product_id();  }  }    if ( count($product_ids)gt;0 amp;amp; $product_id == 2805 ) {  //email 1  } else if ( empty($product_ids) amp;amp; $product_id == 2805 ) {  //email 2  } }  

Ответ №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-gt;mailer();  $product_ids = array( ); // Initializing  $customer_email = $order-gt;get_billing_email();  $customer_name = $order-gt;get_billing_first_name();    foreach ( $order-gt;get_items() as $item ) {  $meta_data = $item-gt;get_meta('meno'); // Zisti ake je meno  $venovanie = $item-gt;get_meta('venovanie'); // // Zisti ake je venovanie  $product_id = $item-gt;get_variation_id() ? $item-gt;get_variation_id() : $item-gt;get_product_id();    if( empty($meta_data) ) {  $product_ids[] = $item-gt;get_variation_id() gt; 0 ? $item-gt;get_variation_id() : $item-gt;get_product_id();  }  }   if(( !empty($product_ids) amp;amp; in_array( 2805, $product_ids)) || ( !empty($product_ids) amp;amp; $product_id == 2805 )){  //email 1  }  if(( empty($product_ids) amp;amp; in_array( 2805, $product_ids)) || ( empty($product_ids) amp;amp; $product_id == 2805 )){  //email 2  } }