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

时间:2017-04-17 15:39:19

标签: php wordpress woocommerce orders email-notifications

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

在我的woocommerce订单页面中,我需要打开订单并执行以下操作:

  
      
  • 订单001 --->发送至Email1@exemple.com =订单001 - 发送至Email1@exemple.com
  •   
  • 订购002 ---->发送至Email2@exemple.com =订单002 - 发送至Email2@exemple.com
  •   
  • 订单003 --->发送至Email1@exemple.com =订单003 - 发送至Email1@exemple.com
  •   

我不知道从哪里开始。

有没有人有想法或某些代码来实现这样的目标?

由于

1 个答案:

答案 0 :(得分:5)

这是一个完整的答案,可满足您的需求。您必须在第二个功能中设置经销商列表中的电子邮件和名称数组。

此代码将在后端订单编辑页面中显示带有选择器的自定义元数据框,如果您要设置经销商,您将点击"保存订单" ...

weekday

新订单通知电子邮件只会发送一次到该经销商的电子邮件地址。

以下是代码:

//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文件中,或者放在任何插件文件中。

此代码经过测试并有效。