#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 } }