2016-08-06 27 views
0

配送エリアのwoocommerce checkoutページに追加の電子メールを追加し、その電子メールに注文コピーを送信したいと思いますか?Woocommerce Checkoutで配送電子メールを追加して電子メール通知を送信

これを解決するために長い間終了していましたが、解決策を見つけることができませんでした。誰もが私にこれを助けることを願っています

+1

はい、可能です。 – helgatheviking

+0

@helgatheviking私はurメソッドを経由していましたが、出荷電子メールに電子メール通知を送信できませんでしたが、もちろん私は出荷エリアのフィールドを見ることができます –

+0

これまでの投稿。私は旅行していますが、私は時間があるときに見ていきます。その間、['get_recipient()'](https://github.com/woothemes/woocommerce/blob/master/includes/emails/class-wc-email.php#L268-L273)を見てくださいトランザクション電子メールに追加の受信者を追加するために必要なフィルタ。特に、新しい電子メールアドレスを正しく追加して保存している場合は、これが必要です。 – helgatheviking

答えて

1

ああ、私はそれを投稿したことを忘れていました。ここに、更新された完全なプラグインがあります。 WooCommerceの新しいバージョンでは、電子メールの受信者をコンマ区切りの春にする必要があります。私のプラグインの古いバージョンは、WooCommerceが処理できなかった配列を返していました。

<?php 
/* 
Plugin Name: WooCommerce Shipping Email 
Plugin URI: https://gist.github.com/helgatheviking/d2975aa4d190a5b55922# 
Description: Add a shipping email field to checkout and notify of new orders 
Version: 1.0.1 
Author: Kathy Darling 
Author URI: http://kathyisawesome.com 
Requires at least: 4.0 
Tested up to: 4.0 

Copyright: © 2014 Kathy Darling. 
License: GNU General Public License v3.0 
License URI: http://www.gnu.org/licenses/gpl-3.0.html 

*/ 


/** 
* The Main WC_Shipping_Email class 
**/ 
if (! class_exists('WC_Shipping_Email')) : 

class WC_Shipping_Email { 

    /** 
    * @var WC_Shipping_Email - the single instance of the class 
    * @since 1.0 
    */ 
    protected static $_instance = null;   

    /** 
    * Main WC_Shipping_Email Instance 
    * 
    * Ensures only one instance of WC_Shipping_Email is loaded or can be loaded. 
    * 
    * @static 
    * @see WC_Shipping_Email() 
    * @return WC_Shipping_Email - Main instance 
    * @since 1.0 
    */ 
    public static function instance() { 
     if (is_null(self::$_instance)) { 
      self::$_instance = new self(); 
     } 
     return self::$_instance; 
    } 

    /** 
    * Cloning is forbidden. 
    * 
    * @since 1.0 
    */ 
    public function __clone() { 
     _doing_it_wrong(__FUNCTION__, __('Cheatin&#8217; huh?', 'woocommerce-mix-and-match'), '2.0'); 
    } 

    /** 
    * Unserializing instances of this class is forbidden. 
    * 
    * @since 1.0 
    */ 
    public function __wakeup() { 
     _doing_it_wrong(__FUNCTION__, __('Cheatin&#8217; huh?', 'mix-and-match'), '2.0'); 
    } 

    /** 
    * WC_Shipping_Email Constructor 
    * 
    * @access public 
    * @return WC_Shipping_Email 
    * @since 1.0 
    */ 

    public function __construct() { 

     $this->id = 'email'; 
     $this->meta = '_shipping_email'; 
     $this->label = __('Shipping Email', 'woocommerce-shipping-email'); 

     // add email field to checkout 
     add_filter('woocommerce_shipping_fields' , array($this, 'add_shipping_fields')); 
     add_filter('woocommerce_admin_shipping_fields' , array($this, 'admin_shipping_fields')); 

     // add recipient to specific emails 
     add_filter('woocommerce_email_recipient_customer_processing_order' , array($this, 'add_recipient'), 20, 2); 
     add_filter('woocommerce_email_recipient_customer_completed_order' , array($this, 'add_recipient'), 20, 2); 
     add_filter('woocommerce_email_recipient_customer_note' , array($this, 'add_recipient'), 20, 2); 

     // display meta key in order overview 
     add_action('woocommerce_order_details_after_customer_details' , array($this, 'after_customer_details')); 

     // display meta key in email 
     add_action('woocommerce_before_template_part' , array($this, 'before_email_addresses'), 10, 4); 

    } 


    /*-----------------------------------------------------------------------------------*/ 
    /* Plugin Functions */ 
    /*-----------------------------------------------------------------------------------*/ 

    /** 
    * Add email to front-end shipping fields 
    * 
    * @var array $fields 
    * @return array 
    * @since 1.0 
    */ 

    function add_shipping_fields($fields) { 
     $fields['shipping_' . $this->id] = array(
      'label'   => $this->label, 
      'required'  => true, 
      'class'   => array('form-row-first'), 
      'validate'  => array('email'), 
     ); 
     return $fields; 
    } 

    /** 
    * Add email to Admin Order overview 
    * 
    * @var array $fields 
    * @return array 
    * @since 1.0 
    */ 

    function admin_shipping_fields($fields) { 
     $fields[$this->id] = array(
      'label'   => $this->label 
     ); 
     return $fields; 
    } 

    /** 
    * Add recipient to emails 
    * 
    * @var string $email 
    * @return string 
    * @since 1.0 
    */ 
    function add_recipient($email, $order) { 
     $additional_email = get_post_meta($order->id, $this->meta, true); 

     if($additional_email && is_email($additional_email)){ 
      if(is_array($email)){ 
       $email = explode(',', $email); 
       array_push($email, $additional_email); 
       $email = implode(',', $email); 
      } elseif(is_string($email)){ 
       $email .= "," . $additional_email; 
      } 
     } 

     return $email; 
    } 

    /** 
    * Display meta in my-account area Order overview 
    * 
    * @var object $order 
    * @return null 
    * @since 1.0 
    */ 

    public function after_customer_details($order){ 

     $value = get_post_meta($order->id, $this->meta, true); 

     if($value){ 
      echo '<dt>' . $this->label . ':</dt><dd>' . $value . '</dd>'; 
     } 

    } 

    /** 
    * Display meta in my-account area Order overview 
    * 
    * @var array $fields 
    * @return array 
    * @since 1.0 
    */ 

    public function before_email_addresses($template_name, $template_path, $located, $args){ 

     if($template_name == 'emails/email-addresses.php' && isset($args['order' ]) && ($value = get_post_meta($args['order']->id, $this->meta, true))){ 

      if (isset($args['plain_text']) && $args['plain_text']){ 

       echo $this->label . ': ' . $value . "\n"; 

      } else { 

       echo '<p><strong>' . $this->label . ':</strong> ' . $value . '</p>'; 

      } 

     } 

    } 



} //end class: do not remove or there will be no more guacamole for you 

endif; // end class_exists check 


/** 
* Returns the main instance of WC_Shipping_Email to prevent the need to use globals. 
* 
* @since 2.0 
* @return WooCommerce 
*/ 
function WC_Shipping_Email() { 
    return WC_Shipping_Email::instance(); 
} 

// Launch the whole plugin 
WC_Shipping_Email(); 

NB:これはcustomer_processing_order、customer_completed_order、およびcustomer_noteメールの出荷メールに送信します。

+0

うわー、それは働いた、ありがとうhelgatheviking。 –

関連する問題