WooCommerce - 从functions.php文件发送新订单/客户发票电子邮件

时间:2016-06-24 05:03:00

标签: php wordpress email woocommerce

我正在尝试通过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 );  
}

1 个答案:

答案 0 :(得分:3)

我认为你需要这种类型的代码。

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:&quot;Helvetica Neue&quot;,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:&quot;Helvetica Neue&quot;,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:&quot;Helvetica Neue&quot;,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:&quot;Helvetica Neue&quot;,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:&quot;Helvetica Neue&quot;,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 ), '', '' );     
}

希望它对你有用。

由于