У меня есть список писем (дилеров), и мне нужно, когда я получаю заказ в wp-admin, я открываю этот заказ и отправляю этот заказ дилеру (коммерческому пользователю …). У каждого дилера есть электронное письмо и отметьте этот заказ в пользовательском поле, которое он отправил этому дилеру.
На моей странице заказов woocommerce мне нужно открыть заказ и сделать что-то вроде этого:
- Заказ 001 —> отправить по электронной почте1@exemple.com = Заказ 001 – отправлен по электронной почте1@exemple.com
- Заказ 002 —-> отправить на Email2@exemple.com = Заказ 002 – отправлен по электронной почте 2@exemple.com
- Заказ 003 —> отправить по электронной почте1@exemple.com = Заказ 003 – отправлен по электронной почте1@exemple.com
Я не знаю, с чего начать.
У кого-нибудь есть идея или какой-то код для достижения чего-то подобного?
благодаря
Вот полный ответ, который будет отвечать вашим потребностям. Вам нужно будет установить во 2-й функции массив писем и имен из списка дилеров.
Этот код будет отображаться на бэкэндовых страницах редактирования заказа пользовательским обменом с селектором, если бы вы установили дилера, и вы нажмете «Сохранить заказ» …
Новое электронное письмо с уведомлением о заказе отправляется только один раз на адрес электронной почты дилера.
Вот код:
//Adding Meta container admin shop_order pages add_action( 'add_meta_boxes', 'my_custom_order_meta_box' ); if ( ! function_exists( 'my_custom_order_meta_box' ) ) { function my_custom_order_meta_box() { global $woocommerce, $order, $post; add_meta_box( 'dealer_dispatch', __('Dealer Dispatch','woocommerce'), 'add_order_custom_fields_for_packaging', 'shop_order', 'side', 'core' ); } } //adding Meta field in the meta container admin shop_order pages if ( ! function_exists( 'add_order_custom_fields_for_packaging' ) ) { function add_order_custom_fields_for_packaging() { global $woocommerce, $order, $post; // Define HERE your array of values <== <== <== <== <== <== <== <== $option_values = array( 'default' => __('no selection', 'woocommerce'), 'dealer1@email.com' => 'Dealer 1 Name', 'dealer2@email.com' => 'Dealer 2 Name', 'dealer3@email.com' => 'Dealer 3 Name', ); // Get the values from the custom-fields (if they exist) $meta_field_data = get_post_meta( $post->ID, '_dealer_dispatch', true ); $dealer_email_sent = get_post_meta( $post->ID, '_dealer_email_sent', true ); echo '<input type="hidden" name="my-custom-order_meta-box-nonce" value="'. wp_create_nonce() .'"> <label for="dealer_dispatch">'.__('Select a dealer', 'woocommerce').'</label><br> <select name="dealer_dispatch">'; foreach( $option_values as $option_key => $option_value ){ if ( $meta_field_data == $option_key || 'default' == $option_key ) $selected = ' selected'; else $selected = ''; echo '<option value="'.$option_key.'"'.$selected.'>'. $option_value.'</option>'; } echo '</select><br>'; // if an email has been sent to the dealer we display a message if( ! empty($dealer_email_sent) ) echo '<p style="color:green; font-weight:bold;">'.__('Email sent to: ', 'woocommerce').$dealer_email_sent.'</p>'; } } //Save the data of the Meta field add_action( 'save_post', 'add_my_custom_field_for_order_meta_box', 20, 1 ); if ( ! function_exists( 'add_my_custom_field_for_order_meta_box' ) ) { function add_my_custom_field_for_order_meta_box( $post_id ) { ## Verify and securing data. ## // Check if our nonce is set. if ( ! isset( $_POST[ 'my-custom-order_meta-box-nonce' ] ) ) { return $post_id; } $nonce = $_REQUEST[ 'my-custom-order_meta-box-nonce' ]; //Verify that the nonce is valid. if ( ! wp_verify_nonce( $nonce ) ) { return $post_id; } // Continuing only if form is submited. if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) { return $post_id; } // Check and set the user's permissions. if ( 'page' == $_POST[ 'post_type' ] ) { if ( ! current_user_can( 'edit_page', $post_id ) ) { return $post_id; } } else { if ( ! current_user_can( 'edit_post', $post_id ) ) { return $post_id; } } // -- -- IT IS SECURED NOW -- -- // Sanitize input and update order meta data custom field. $dealer_dispatch = $_POST[ 'dealer_dispatch' ]; // Saving the selected value if( 'default' != $dealer_dispatch ) update_post_meta( $post_id, '_dealer_dispatch', sanitize_text_field( $dealer_dispatch ) ); # SEND CUSTOM EMAIL ONLY ONCE # $dealer_dispatch_val = get_post_meta( $post_id, '_dealer_dispatch', true ); $dealer_email_sent = get_post_meta( $post_id, '_dealer_email_sent', true ); if( empty($dealer_email_sent) && !empty($dealer_dispatch_val) ){ $email_notifications = WC()->mailer()->get_emails(); $email_notifications['WC_Email_New_Order']->recipient = $dealer_dispatch; $email_notifications['WC_Email_New_Order']->trigger( $post_id ); // Creating a custom meta data for this order to avoid sending this email 2 times update_post_meta( $post_id, '_dealer_email_sent', $dealer_dispatch_val ); } } }
Код идет в файле function.php вашей активной дочерней темы (или темы), а также в любом файле плагина.
Этот код проверен и работает.