Top.Mail.Ru

Woocommerce: отправка разных писем для разных товаров

Была в одном проекте нестандратная задача – нужно чтобы после оплаты для разных товаров были отправлены разные письма клиентам. То есть, клинет покупает один товар – ему после оплаты на почту приходит письмо с инструкциями для этого товара, а когда покупает другой товар, то приходит другое письмо с другой инструкицей.

Нужно сразу оговориться, что товар в магазине виртуальный и не физический. Особого значения на рассылку писем это не влияет, но все же.

Разные письма после оплаты разных товаров – как реализовать в Woocommerce?

Плагины

Искал плагины в стандартном репозитории – ничего не нашел. Погугил, поискал. нашел один плагин частного программиста, который решал этот вопрос. При его установке, можно было отдельному товару задавать отдельное письмо. Но там не совсем письмо. Там нужно было в отдельном пункте меню создавать отдельные сообщения, а потом в настройках товара задавать конкретному товару одно из сообщений. Но мне не нужно было для каждого товара – мне нужно для конкретной категории товаров.

Фактически полчалось, что это сообщение “врезалось” в стандартную рассылку. Задачи магазина это решало, но не стал его использовать и вот почему:

  • редко доверяю самописным плагинам, если не делаю их сам;
  • если и устанавливаю плагины со стороны, то от известных команд, с поддержкой и все такое;
  • не попадал 100% по функционалу, пришлось бы дорабатывать.

Поэтому без ссылок на него. Если что, то найдете.

Переопределение шаблонов

Была такая идея. То есть нужно было:

  1. Создать дочернюю тему. Это обязательно. Я на всех проектах делаю сразу, так как люблю дописывать что-то самостоятельно.
  2. Скопировать папку emails из woocommerce в свою дочернюю тему, но также по пути /дочерняя темя/wooccomerce/emails.
  3. В этой папке создать собственные шаблоны для писем рядом с основными, некие email1.php и email2.php и доработать их до своих нужд. Можно было бы скопировать основной шаблон в эти и доработать его.
  4. Потмом functions.php переопределить шаблон письма, отфильтровав товар по категории.

Хук в functions.php может выглядеть вот так, как ниже. Я его не тестировал! Это лишь для примера и чтобы натолкнуть на мысль.

add_filter( 'woocommerce_locate_template', 'load_custom_email_template', 10, 3 );
function load_custom_email_template( $template, $template_name, $template_path ) {
    if ( 'emails/customer-completed-order.php' === $template_name ) {
        global $woocommerce;
        $order_id = absint( $_GET['order_id'] ?? 0 );
        if ( !$order_id ) {
            return $template;
        }

        $order = wc_get_order( $order_id );
        if ( !$order ) {
            return $template;
        }

        foreach ( $order->get_items() as $item ) {
            $product_id = $item->get_product_id();

            // Если товар имеет тег одной категории ID_cat
            if ( has_term( ID_cat, 'product_tag', $product_id ) ) {
                $template = get_template_directory() . '/woocommerce/emails/email1.php';
                return $template;
            }

            // Если товар имеет тег второй категории ID_cat
            if ( has_term( ID_cat, 'product_tag', $product_id ) ) {
                $template = get_template_directory() . '/woocommerce/emails/email2.php';
                return $template;
            }
        }
    }

    return $template;
}

Повторюсь, хук, что выше я не тестировал. Да и подход сам не тестировал, потому что он мне показался объемным. По сути мне не нужно было создвать отдельные шаблоны для писем, так как стандартные письма у меня особо не менялись и мне нужно было просто вписать их в инструкции, поэтому я решил пойти по более легкому пути.

А такой вариант просто может существовать. Можете попробовтаь доработать 🙂 .

Разные письма для разных товаров. Рабочий пример

Итак, я решил поступить проще. Решил просто доработать стандартный шаблон отправки писем для товара со статусом “Выполнен”. Это шаблон – customer-completed-order.php. Решил прям в него добавить фильтр, который будет выводить нужный мне контент, если купленный товар находится в нужной мне категории.

Вот код, который можно вставить в этот шаблон письма:

// Цикл по товарам в заказе, чтобы проверять их категории
foreach ( $order->get_items() as $item_id => $item ) {
    $product_id = $item->get_product_id();
    $terms = get_the_terms( $product_id, 'product_cat' );

    if ( $terms && ! is_wp_error( $terms ) ) {
        foreach ( $terms as $term ) {
            if ( $term->term_id == ID_cat_1 ) { 
                // Категория 1 c ID ='ID_cat_1'
                echo 'Выводим что вам нужно в первом письме';

            } elseif ( $term->term_id == ID_cat_2 ) { 
                // Категория ID_cat_2
                echo 'Выводим что вам нужно во втором письме';
            }
        }
    }
}

Можете попробовать. Получается, что вам просто нужно будет найти ID категории товара Woocommerce и вписать их вместо ID_cat_1 и ID_cat_2. Для этого:

  • пройдите в Категории товара;
  • наведите курсор на нужную категорию, но не кликайте;
  • в левом нижнем углу браузера появиться ссылка, куда ведет категория;
  • в ссылке найдите часть tag_ID=’какое-то число’.

Вот это число и будет ID вашей категории.

Заключение

Может так получиться, что ва не для всей категории нужно рассылкать какое-то письмо. Тогда можно сделать отдельную подкатегорию для товара именно для рассылки.

Кстати в самом письме категорий я вставил, текст, нумерованный список, картинки. В общем, можно вставлять любой нужный контент, но в HTML. То есть, если картинка, то в <img src=”ссылка на кратинку”>. И стилизовать элементы немного можно, если записывать стили прям в элементах.

Мне помогло такое решение, надеюсь вам тоже 🙂

Поделитесь с друзьями