将Woocommerce订单发送到产品页面上列出的电子邮件地址

时间:2017-11-01 23:34:01

标签: php wordpress woocommerce orders email-notifications

我使用Woocommerce和Product Addons插件为产品添加额外字段。其中一个字段是一个电子邮件地址,用于让人们将订单确认发送到与结帐页面上显示的帐单邮寄地址不同的地址。应将电子邮件发送到这两个地址。

有关如何修改functions.php文件以执行此操作的任何想法?

2 个答案:

答案 0 :(得分:1)

woocommerce_email_recipient_{$this->id} 过滤器钩子中,您可以使用$order参数来获取第二封电子邮件。

但首先让我们在全球范围内添加一个带有产品附加组件插件的电子邮件字段......

  1. 产品上的添加字段(填写字段并添加到购物车):
  2. enter image description here

    1. 结账时收到的(谢谢)页面中的“电子邮件”字段:
    2. enter image description here

      您可以注意到此字段的标签是“电子邮件”......

      现在,如果我在 wp_woocommerce_order_itemmeta 中查看此订单的数据库,我可以看到meta_key "Email" meta_value "loic@TheAztec.com"

      enter image description here

      现在我可以在下面的代码中设置正确的meta_key来获取我的电子邮件。

      以下代码将添加此附加电子邮件收件人以进行处理和完成客户订单电子邮件通知:

      add_filter( 'woocommerce_email_recipient_customer_completed_order', 'additional_customer_email_recipient', 10, 2 ); // Processing Order
      add_filter( 'woocommerce_email_recipient_customer_processing_order', 'additional_customer_email_recipient', 10, 2 ); // Completed Order
      function additional_customer_email_recipient( $recipient, $order ) {
          if ( ! is_a( $order, 'WC_Order' ) ) return $recipient;
      
          $additional_recipients = array(); // Initializing…
      
          // Iterating though each order item
          foreach( $order->get_items() as $item_id => $item_data ){
              // HERE set the the correct meta_key (like 'Email') to get the correct value
              $email = wc_get_order_item_meta( $item_id, 'Email', true );
      
              // Avoiding duplicates (if many items with many emails)
              // or an existing email in the recipient
              if( ! in_array( $email, $additional_recipients ) && strpos( $recipient, $email ) === false )
                  $additional_recipients[] = $email;
          }
      
          // Convert the array in a coma separated string
          $additional_recipients = implode( ',', $additional_recipients);
      
          // If an additional recipient exist, we add it
          if( count($additional_recipients) > 0)
              $recipient .= ','.$additional_recipients;
      
          return $recipient;
      }
      

      代码放在活动子主题(或主题)的function.php文件中,或者放在任何插件文件中。

      经过测试和工作。

答案 1 :(得分:0)

您可以在function.php中添加以下代码

add_filter( 'woocommerce_email_recipient_customer_completed_order', 'your_email_recipient_filter_function', 10, 2);

function your_email_recipient_filter_function($recipient, $object) {
    $recipient = $recipient . ', me@myemail.com';
    return $recipient;
}

如果您想在BCC发送电子邮件,请尝试以下代码:

add_filter( 'woocommerce_email_headers', 'mycustom_headers_filter_function', 10, 2);

function mycustom_headers_filter_function( $headers, $object ) {
    if ($object == 'customer_completed_order') {
        $headers .= 'BCC: My name <my@email.com>' . "\r\n";
    }