Пользовательская электронная почта не отправляется после завершения заказа в WooCommerce

Я столкнулся с проблемой отправки собственного электронного письма в WooCommerce.

Вот ошибка:

Неустранимая ошибка: невозможно использовать объект типа WC_Order в качестве массива в
/home/wp-content/themes/structure/functions.php в строке 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.

4

Решение

Может быть, есть проблема с: $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 );
}

Вы можете проверить раньше wp_mail() замена функции $user_email по электронной почте, как это:

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

Если вы получили письмо, проблема исходила от $to_email = $order->billing_address;,
(Попробуйте также с woocommerce_thankyou крючок тоже).

И последнее, вы должны протестировать все это на хост-сервере, а не на локальном хосте на вашем компьютере. На localhost отправка почты не работает в большинстве случаев …

2

Другие решения

Неустранимая ошибка: невозможно использовать объект типа WC_Order в качестве массива в
/home/wp-content/themes/structure/functions.php в строке 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' );
1

По вопросам рекламы [email protected]