Пользовательская электронная почта не отправляется по заказу в 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 <your@email.com>' . "\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.

Может возникнуть проблема с: $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 <your@email.com>' . "\r\n"; wp_mail($to, 'subject', 'This is custom email', $headers ); } 

Вы можете проверить перед wp_mail() замену $user_email электронной почтой следующим образом:

 wp_mail('your.mail@your-domain.tld', 'subject', 'This is custom email', $headers ); 

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

Последнее, вам нужно протестировать все это на размещенном сервере, а не на локальном компьютере на вашем компьютере. При отправке писем localhost в большинстве случаев не работает …

Неустранимая ошибка: нельзя использовать объект типа 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 <your@email.com>' . "\r\n"; wp_mail($to_email, 'subject', 'This is custom email', $headers ); } add_action( 'woocommerce_payment_complete', 'order_completed' ); 

вы используете неправильный крючок все время. Это основная причина проблем. Правильное имя крючка было «add_action (« woocommerce_payment_complete »,« order_completed »)». После того, как я сменил функции, чтобы использовать этот крючок, все прошло правильно.

Поэтому используйте «add_action» («woocommerce_payment_complete», «order_completed») «перехватить и проверить, будет ли ваша почта отправлена.