2016-06-17 6 views
4

У меня возникла проблема с отправкой пользовательского письма в WooCommerce.Пользовательская электронная почта не отправляется на заказ в WooCommerce

Вот ошибка:

Fatal error: Cannot use object of type WC_Order as array in
/home/wp-content/themes/structure/functions.php on line 548

Мой клиент хочет, чтобы отправить пользовательскую электронную почту, когда каждый заказ клиента и оплатить, кроме стандартного по электронной почте подтверждение заказа.

Вот мой код:

$order = new WC_Order($order_id); 

function order_completed($order_id) { 
    $order = new WC_Order($order_id); 
    $to_email = $order["billing_address"]; 
    $headers = 'From: Your Name <[email protected]>' . "\r\n"; 
    wp_mail($to_email, 'subject', 'This is custom email', $headers); 

} 

add_action('woocommerce_payment_complete', 'order_completed') 

Я также попытался "woocommerce_thankyou" крюк вместо "woocommerce_payment_complete", но до сих пор не работает.

Я использую версию Wordpress 4.5.2, а версия WooCommerce - 2.6.1.

+0

Woocommerce новый заказ отправка по электронной почте рабочее ...? – OpenWebWar

+0

отправка по электронной почте PHP mail() функция работающий ..? или smtp – OpenWebWar

ответ

2

Может быть, есть проблема с: $order->billing_address; ... Так что мы можем иметь другой подход, получая текущую электронную почту пользователя (не биллинг или доставка) с wp_get_current_user(); WordPress функции. Тогда ваш код будет:

add_action('woocommerce_payment_complete', 'order_completed_custom_email_notification') 
function order_completed_custom_email_notification($order_id) { 
    $current_user = wp_get_current_user(); 
    $user_email = $current_user->user_email; 
    $to = sanitize_email($user_email); 
    $headers = 'From: Your Name <[email protected]>' . "\r\n"; 
    wp_mail($to, 'subject', 'This is custom email', $headers); 
} 

You can test before wp_mail() function replacing $user_email by your email like this:

wp_mail('[email protected]', 'subject', 'This is custom email', $headers); 

If you get the mail, the problem was coming from $to_email = $order->billing_address; .
(Try it also with woocommerce_thankyou hook too).

Последняя вещь, вы должны проверить все это на сервере размещенного, а не с локального хоста на вашем компьютере. На LOCALHOST отправки почты не работает в большинстве случаев ...

+0

Hi LoicTheAztec, спасибо за ваш ответ. Теперь ошибка исчезла, но все еще не получала электронную почту :(любая идея? –

+0

Я пробовал woocommerce_thankyou, но все еще не получаю электронную почту, я также проверял папку со спамом –

+0

Я работаю на реальном сервере, если я добавляю адрес электронной почты вручную, я получаю электронную почту при добавлении $ user_email его не работает –

1

Fatal error: Cannot use object of type WC_Order as array in /home/wp-content/themes/structure/functions.php on line 548

Это означает, что $object является объектом, и вы должны использовать объект обозначения, такие как $object->billing_address вместо массива обозначений $object['billing_address']. Свойство объекта адреса биллинга будет определено, когда вы вызываете его методом магии __get() класса WC_Order, который действительно не сильно отличается от подхода LoicTheAztec выше.

function order_completed($order_id) { 
    $order = wc_get_order($order_id); 
    $to_email = $order->billing_address; 
    $headers = 'From: Your Name <[email protected]>' . "\r\n"; 
    wp_mail($to_email, 'subject', 'This is custom email', $headers); 
} 
add_action('woocommerce_payment_complete', 'order_completed');