发送订单woocommerce发送电子邮件通知给经销商

问题描述:

我有一个电子邮件列表(经销商),我需要当我在wp-admin接收订单时,我打开此订单并将此订单发送给经销商(商业,用户... )。每个经销商都有一封电子邮件,并在自定义字段中标记此订单,并将其发送给该经销商。发送订单woocommerce发送电子邮件通知给经销商

在我woocommerce订单页面我需要打开一个命令,做这样的事情:

我不知道从哪里开始。

有没有人有一个想法或一些代码来实现这样的事情?

感谢

下面是一个完整的答案是会脚你的需要。您必须在第二个功能中设置经销商列表中电子邮件和名称的数组。

此代码将在后台订单编辑页面显示定制metabox有一个选择,是你会设一个经销商,你会点击“保存订单” ......

Custom Edit Order metabox

新秩序的通知电子邮件将只发送一次到该经销商的电子邮件地址。

下面是代码:

//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'), 
      '[email protected]'  => 'Dealer 1 Name', 
      '[email protected]'  => 'Dealer 2 Name', 
      '[email protected]'  => '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文件或也以任何插件文件。

此代码已经过测试并可正常工作。