配送エリアのwoocommerce checkoutページに追加の電子メールを追加し、その電子メールに注文コピーを送信したいと思いますか?Woocommerce Checkoutで配送電子メールを追加して電子メール通知を送信
これを解決するために長い間終了していましたが、解決策を見つけることができませんでした。誰もが私にこれを助けることを願っています
配送エリアのwoocommerce checkoutページに追加の電子メールを追加し、その電子メールに注文コピーを送信したいと思いますか?Woocommerce Checkoutで配送電子メールを追加して電子メール通知を送信
これを解決するために長い間終了していましたが、解決策を見つけることができませんでした。誰もが私にこれを助けることを願っています
ああ、私はそれを投稿したことを忘れていました。ここに、更新された完全なプラグインがあります。 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’ 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’ 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メールの出荷メールに送信します。
うわー、それは働いた、ありがとうhelgatheviking。 –
はい、可能です。 – helgatheviking
@helgatheviking私はurメソッドを経由していましたが、出荷電子メールに電子メール通知を送信できませんでしたが、もちろん私は出荷エリアのフィールドを見ることができます –
これまでの投稿。私は旅行していますが、私は時間があるときに見ていきます。その間、['get_recipient()'](https://github.com/woothemes/woocommerce/blob/master/includes/emails/class-wc-email.php#L268-L273)を見てくださいトランザクション電子メールに追加の受信者を追加するために必要なフィルタ。特に、新しい電子メールアドレスを正しく追加して保存している場合は、これが必要です。 – helgatheviking