Я столкнулся с проблемой отправки собственного электронного письма в 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.
Может быть, есть проблема с: $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 отправка почты не работает в большинстве случаев …
Неустранимая ошибка: невозможно использовать объект типа 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' );