WooCommerce - 从 functions.php 文件发送新订单/客户发票电子邮件
Posted
技术标签:
【中文标题】WooCommerce - 从 functions.php 文件发送新订单/客户发票电子邮件【英文标题】:WooCommerce - Send New Order / Customer Invoice Email from functions.php file 【发布时间】:2016-10-26 15:09:39 【问题描述】:我正在尝试通过 functions.php 文件发送新订单电子邮件和客户发票电子邮件。
如何触发完整的订单对象以电子邮件形式发送?
我正在尝试两种不同类型的代码。
add_action('woocommerce_payment_complete', 'my_custom_checkout_field_looking');
function my_custom_checkout_field_looking( $order_id )
$order = new WC_Order( $order_id );
// first type of Code. Send Email but did not send complete order object.
$mailer = WC()->mailer();
$subject = 'New Order Email # ' . $order_id;
$mailer->send( 'example@gmail.com', $subject, $mailer->wrap_message( $subject, $order ), '', '' );
// Second type of Code. Do not send email and doing nothing
global $woocommerce;
$mailer2 = $woocommerce->mailer();
// Email customer with order-processing receipt
$email = $mailer2->emails['WC_Email_Customer_Invoice'];
$email->trigger( $order );
// Email admin with new order email
$email = $mailer2->emails['WC_Email_New_Order'];
$email->trigger( $order );
【问题讨论】:
方法略有不同,但您可以尝试注册custom email “完整的订单对象”是什么意思?像 $order 的“var_dump 版本”? 何时触发邮件?比如用户下订单或通过一些自定义链接/操作或自定义订单状态? 【参考方案1】:我认为你需要这种类型的代码。
add_action('woocommerce_thankyou', 'my_custom_new_order_email');
function my_custom_new_order_email( $order_id )
$order = new WC_Order( $order_id );
$billing_address = $order->get_formatted_billing_address(); // for printing or displaying on web page
$shipping_address = $order->get_formatted_shipping_address();
$email = $order->billing_email;
$name = $order->billing_first_name.' '.$order->billing_last_name;
$billing_phone = $order->billing_phone;
$date = date('M d, Y');
$data = '';
$data .= "<table border='0' cellpadding='0' cellspacing='0' width='600'><tbody><tr>
<td valign='top' style='background-color:#fdfdfd'>
<table border='0' cellpadding='20' cellspacing='0' width='100%'>
<tbody>
<tr>
<td valign='top' style='padding:48px'>
<div style='color:#737373;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-size:14px;line-height:150%;text-align:left'>
<span>
<p style='margin:0 0 16px'>
You have received an order from $name. The order is as follows:
</p>
</span>
<h2 style='color:#557da1;display:block;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-size:18px;font-weight:bold;line-height:130%;margin:16px 0 8px;text-align:left'>
Order # $order_id ( $date )
</h2>
<div>
<div>";
if( sizeof( $order->get_items() ) > 0 )
$data .= "<table cellspacing='0' cellpadding='6' style='width:100%;border:1px solid #eee' border='1'>
<thead>
<tr>
<th scope='col' style='text-align:left;border:1px solid #eee;padding:12px'>
Product
</th>
<th scope='col' style='text-align:left;border:1px solid #eee;padding:12px'>
Quantity
</th>
<th scope='col' style='text-align:left;border:1px solid #eee;padding:12px'>
Price
</th>
</tr>
</thead>
<tbody>";
$data .= $order->email_order_items_table( false, true );
$data .= "</tbody><tfoot>";
if ( $totals = $order->get_order_item_totals() )
$i = 0;
foreach ( $totals as $total )
$i++;
$label = $total['label'];
$value = $total['value'];
$data .= "<tr>
<th scope='row' colspan='2' style='text-align:left; border: 1px solid #eee;'>$label</th>
<td style='text-align:left; border: 1px solid #eee;'>$value</td>
</tr>";
$data .= "</tfoot></table>";
$data .=
"<span>
<h2 style='color:#557da1;display:block;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-size:18px;font-weight:bold;line-height:130%;margin:16px 0 8px;text-align:left'>
Customer details
</h2>
<p style='margin:0 0 16px'>
<strong>Email:</strong>
<a href='mailto:' target='_blank'>
$email
</a>
</p>
<p style='margin:0 0 16px'>
<strong>Tel:</strong>
$billing_phone
</p>
<table cellspacing='0' cellpadding='0' style='width:100%;vertical-align:top' border='0'>
<tbody>
<tr>
<td valign='top' width='50%' style='padding:12px'>
<h3 style='color:#557da1;display:block;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-size:16px;font-weight:bold;line-height:130%;margin:16px 0 8px;text-align:left'>Billing address</h3>
<p style='margin:0 0 16px'> $billing_address </p>
</td>
<td valign='top' width='50%' style='padding:12px'>
<h3 style='color:#557da1;display:block;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-size:16px;font-weight:bold;line-height:130%;margin:16px 0 8px;text-align:left'>Shipping address</h3>
<p style='margin:0 0 16px'> $shipping_address </p>
</td>
</tr>
</tbody>
</table>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>";
$mailer = WC()->mailer();
$subject = 'New Customer Order';
$mailer->send( 'abc@example.com,def@example.com', $subject, $mailer->wrap_message( $subject, $data ), '', '' );
希望它对你有用。
谢谢
【讨论】:
以上是关于WooCommerce - 从 functions.php 文件发送新订单/客户发票电子邮件的主要内容,如果未能解决你的问题,请参考以下文章
在 Woocommerce 中自动将订单状态从处理更改为完成