Я столкнулся с проблемой отправки пользовательского письма в 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») «перехватить и проверить, будет ли ваша почта отправлена.