/ Плагины / Письма Woocommerce

Письма Woocommerce

HIT

05.10.2017

7612

2

В плагине интернет-магазина Woocommerce есть система отправки писем. Письма отправляются администратору и клиенту при различных ситуациях:

Наименование письмаСуть письмаШаблоны WC
Заказ в обработкеКлиент сделал заказ на сайте. По-умолчанию письмо уходит и клиенту и администраторуcustomer-on-hold-order.php, admin-new-order.php

Шаблоны писем бывают 2-х типов: html (основной, по умолчанию) и текстовый (plain), он выбирается в настройках письма.

Редактируем шаблоны писем

Убрать блок Адрес оплаты. Необходимо вручную закомментировать billing_address в шаблоне email-addresses.php

<td style="width: 20px;">
<?php echo '<a class="minus" onClick="updateQty(\''.$cart_item_key.'\','.($cart_item['quantity']-1).')">–</a>'; ?>
</td>

<td class="product-quantity">
<?php echo apply_filters( 'woocommerce_checkout_cart_item_quantity', ' <strong class="product-quantity">' . sprintf( '&times; %s', $cart_item['quantity'] ) . '</strong>', $cart_item, $cart_item_key ); ?>
</td>

<td style="width: 20px;">
<a rel="nofollow" href="/?wc-ajax=add_to_cart&amp;add-to-cart=<?php echo $cart_item['product_id'];?>" data-quantity="1" data-product_id="<?php echo $cart_item['product_id'];?>" data-product_sku="" class="product_type_simple add_to_cart_button ajax_add_to_cart plus">+</a>
</td>

Отправка письма при статусе В ожидании оплаты

Стандартно woocommerce не отправляет уведомления при статусе заказа В ОЖИДАНИИ ОПЛАТЫ. Данный статус создается в момент создания заказа с формой оплаты электронными средствами, и сохраняется до момента получения средств и превращения в В ОБРАБОТКЕ, либо отменяется при непоступлении средств в течение некоторого времени (ОТМЕНЕН).

Задача: отправлять письмо администратору при появлении заказа со статусом В ОЖИДАНИИ ОПЛАТЫ.

Платный плагин Woocommerce Follow UP Emails решает данную задачу. Принцип работы — создание пользовательских шаблонов уведомлений. Настройка отправки уведомления:

1. Создаем шаблон пользовательского письма. Выбираем тип письма:

  • Storewide Email (Уведомления ассортимента)
  • Signup Email (Уведомления регистрации)
  • Manual Email (Ручные уведомления)
  • Customer Email (Клиентские уведомления)
  • Twitter Message

2. После выбора типа письма снизу загрузятся настройки для этого типа. В списке Trigger необходимо выбрать событие после которого должно отправляться письмо. В полях Sending Delay настраиваем время задержки отправки письма (по-умолчанию 1 минута).

Варианты событий для группы Клиентские уведомления

after last purchase (после последней покупки)
after order total is above (после завершения заказа № ____ (прописать № заказа))
after order total is below (после того, как сумма заказа ниже ____)
after customer purchased more than one time (после покупки клиента более одного раза)
after total orders by customer (после суммы одного заказа ____)
after total purchase amount by customer (после общей суммы всех покупок клиентом ____)

3. Само тело письма заполняем как необходимо. Можно добавить переменные, список возможных переменных при данном типе уведомления выводиться в блоке Variables (справа). Типовой шаблон уведомления:

Новый заказ!

Ожидается оплата заказа №{order_number} от {order_datetime}
Форм оплаты: {order_pay_method}

Заказ состоит из следующих позиций:
{item_prices_categories}

Сумма заказа <strong>{order_subtotal}</strong>

Данные о покупателе:
{customer_first_name}
{customer_email}
{order_billing_phone} 

{order_shipping_address}

4. Изменить статус уведомления на активный.

После этого, при наступлении события выбранного в шаге 2 будет отправлено письмо-уведомление. По-умолчанию письма отправляются на e-mail администратора сайта, если необходимо добавить дополнительные e-mail, это можно сделать во вкладке From/Reply-to (нижняя часть настроек уведомления).

Альтернативный способ (функцией)

Отправка стандартного письма о новом заказе

// Отправка письма админу о новом заказе при статусе «В ожидании оплаты»
add_action( 'woocommerce_checkout_order_processed', 'pending_new_order_notification', 20, 1 );
function pending_new_order_notification( $order_id ) {

    // Get an instance of the WC_Order object
    $order = wc_get_order( $order_id );

    // Only for "pending" order status
    if( ! $order->has_status( 'pending' ) ) return;

    // Send "New Email" notification (to admin)
    WC()->mailer()->get_emails()['WC_Email_New_Order']->trigger( $order_id );
}

Отправка специального письма о таком заказе

// New order notification only for "Pending" Order status
add_action( 'woocommerce_checkout_order_processed', 'pending_new_order_notification', 20, 1 );
function pending_new_order_notification( $order_id ) {
    // Get an instance of the WC_Order object
    $order = wc_get_order( $order_id );

    // Only for "pending" order status
    if( ! $order->has_status( 'pending' ) ) return;

    // Get an instance of the WC_Email_New_Order object
    $wc_email = WC()->mailer()->get_emails()['WC_Email_New_Order'];

    ## -- Customizing Heading, subject (and optionally add recipients)  -- ##
    // Change Subject
    $wc_email->settings['subject'] = __('{site_title} - New customer Pending order ({order_number}) - {order_date}');

    // Change Heading
    $wc_email->settings['heading'] = __('New customer Pending Order'); 
    // $wc_email->settings['recipient'] .= ',name@email.com'; // Add email recipients (coma separated)

    // Send "New Email" notification (to admin)
    $wc_email->trigger( $order_id );
}

Добавить в шаблоны писем миниатюру и SKU

// Edit order items table template defaults
function sww_add_wc_order_email_images( $table, $order ) {
  
	ob_start();
	
	$template = $plain_text ? 'emails/plain/email-order-items.php' : 'emails/email-order-items.php';
	wc_get_template( $template, array(
		'order'                 => $order,
		'items'                 => $order->get_items(),
		'show_download_links'   => $show_download_links,
		'show_sku'              => $show_sku,
		'show_purchase_note'    => $show_purchase_note,
		'show_image'            => true,
		'image_size'            => $image_size
	) );
   
	return ob_get_clean();
}
add_filter( 'woocommerce_email_order_items_table', 'sww_add_wc_order_email_images', 10, 2 );

Также можно настроить необходимый размер миниатюры

'image_size'    => array( 32, 32 )

Либо это можно сделать более аккуратно, добавлением новой колонки «Изображение», но для этого нужно редактировать шаблоны /emails/email-order-details.php и /emails/email-order-items.php

В /emails/email-order-items.php добавить колонку с выводом изображения, включив вывод изображения ($show_image = 1;), и если надо sku ($show_sku = 1;). Размер изображения можно указать так:

$product->get_image( array( 120, 120 ) );

Корректируем у нижней ячейки colspan.

В /emails/email-order-details.php добавляем еще одну ячейку <th> с подписью Изображение и корректируем в нижних строках у колонок colspan.

Изменение дизайна письма

Базовые изменения вносят в самой панели WC. Если нужно изменить более детально необходимо править локальную версию файла woocommerce/emails/email-styles.php
либо прописывать хук:

add_filter( 'woocommerce_email_styles', 'patricks_woocommerce_email_styles' );
function patricks_woocommerce_email_styles( $css ) {
	$css .= "#template_header { background-color: #231f20; }";
	return $css;
}

Добавить что-либо только в письмо администратору

add_action( 'woocommerce_email_after_order_table', 'wc_add_payment_type_to_admin_emails', 15, 2 );
function wc_add_payment_type_to_admin_emails( $order, $is_admin_email ) {
if ( $is_admin_email ) {
echo '<p><strong>Способ оплаты:</strong> ' . $order->payment_method_title . '</p>';
}
}

Если нужно добавить в строке с товаров (под наименованием), например описание товара (только для администратора)

// Setting the "sent_to_admin" as a global variable
add_action('woocommerce_email_before_order_table', 'email_order_id_as_a_global', 1, 4);
function email_order_id_as_a_global($order, $sent_to_admin, $plain_text, $email){
    $GLOBALS['email_data'] = array(
        'sent_to_admin' => $sent_to_admin, // <== HERE we set "$sent_to_admin" value
        'email_id' => $email->id, // The email ID (to target specific email notification)
    );
}

// Conditionally customizing footer email text
add_action( 'woocommerce_order_item_meta_end', 'custom_email_order_item_meta_end', 10, 3 );
function custom_email_order_item_meta_end( $item_id, $item, $order ){

    // Getting the custom 'email_data' global variable
    $refNameGlobalsVar = $GLOBALS;
    $email_data = $refNameGlobalsVar['email_data'];

    // Only for admin email notifications
    if( ! ( is_array( $email_data ) && $email_data['sent_to_admin'] ) ) return;
	
	$description = get_post($item->get_product_id())->post_content;	
	echo '<br><br>'.$description;
	
}

Письмо администратору о новом пользователе

// Письмо администратору о новом пользователе
add_action( 'woocommerce_created_customer', 'woocommerce_created_customer_admin_notification' );
function woocommerce_created_customer_admin_notification( $customer_id ) {
	wp_send_new_user_notifications( $customer_id, 'admin' );
}

Поделиться в соц. сетях:

  • Комментарии
  • Вложения

Добавить комментарий

2 комментария

  1. Torcedor

    Где переводится payment method для текста письма на удержании? 

    1. Alexandr

      По идее все переводы WC хранятся в файлах woocommerce-ru_RU.mo и woocommerce-ru_RU.po, они находятся в папке wp-content/languages/plugins/ (если только переводы не локализованы в тему).

Письма Woocommerce
Роли пользователей
Рекомендации для васРоли пользователейOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.