John Craig John Craig - 3 months ago 47
PHP Question

Woo Commerce - Send New Order / Customer Invoice Email from functions.php file

I am trying to send new order email and customer invoice email through funtions.php file.

Can anyone know how to fire complete order object to send as a email.

I am trying two different type of code.

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 );
}


Any help will be appreciated.

Thanks

Answer

I think you need such type of code.

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 ), '', '' );     
}

Hopefully It will work for you.

Thanks

Comments