Скрыть элементы цен для определенных категорий продуктов в уведомлении по электронной почте Woocommerce

Я использую WooCommerce 3.1.1 и пытаюсь заменить «сумму цены» некоторым текстом для определенных категорий продуктов в уведомлении о новом заказе для клиентов и администратора.

Я почти все перепробовал, но не могу найти подробную таблицу элементов заказа для уведомлений по электронной почте.

Это письмо пока выглядит так:

Электронная почта

Любая помощь могла бы быть полезна.


person Mujtaba K    schedule 28.10.2017    source источник
comment
Вы пробовали редактировать шаблон электронного письма?   -  person Spartacus    schedule 29.10.2017
comment
Я не могу найти код.   -  person Mujtaba K    schedule 29.10.2017


Ответы (1)


Вам нужно будет сначала прочитать эту официальную документацию, чтобы узнать о < strong> Переопределение шаблонов WooCommerce через активную тему

Шаблоны, которые вам нужно изменить и переопределить: emails/email-order-items.php

В строке 58 для вашей версии WC (или в строке 55 в версии WC 3.2+) вы замените:

<td class="td" style="text-align:<?php echo $text_align; ?>; vertical-align:middle; border: 1px solid #eee; font-family: 'Helvetica Neue', Helvetica, Roboto, Arial, sans-serif;"><?php echo $order->get_formatted_line_subtotal( $item ); ?></td>

С помощью этого (где вы должны установить свою собственную категорию и заменяющую текстовую строку):

<?php
## ---- Variables to define (below)---- ##

$categories = array( 'clothing' ); // The Product categories coma separated (IDs slugs or names)
$replacement_text = __( 'Replacement text (here)' ); // The replacement text

// Getting the email ID global variable (From our function below)
$refNameGlobalsVar = $GLOBALS;
$email_id = $refNameGlobalsVar['email_id_str'];

// When matching product categories, "New Order", "Processing" and "On Hold" email notifications
if( has_term( $categories, 'product_cat', $product->get_id() )
&& ( $email_id == 'new_order' || $email_id == 'customer_processing_order' || $email_id == 'customer_on_hold_order' ) )
    $formated_line_subtotal = $replacement_text;
else
    $formated_line_subtotal = $order->get_formatted_line_subtotal( $item );
?>
<td class="td" style="text-align:<?php echo $text_align; ?>; vertical-align:middle; border: 1px solid #eee; font-family: 'Helvetica Neue', Helvetica, Roboto, Arial, sans-serif;"><?php echo $formated_line_subtotal; ?></td>

Чтобы получить идентификатор электронной почты, вам нужно будет добавить это в файл function.php вашей активной дочерней темы (или активной темы):

// Setting the email_id as a global variable
add_action('woocommerce_email_before_order_table', 'the_email_id_as_a_global', 1, 4);
function the_email_id_as_a_global($order, $sent_to_admin, $plain_text, $email){
    $GLOBALS['email_id_str'] = $email->id;
}

Теперь вы получите это, когда категория продукта совпадает, а также для уведомлений по электронной почте «Новый заказ» (администратор), «Заказ клиента на удержании» и «Заказ на обработку клиента»:

введите здесь описание изображения

person LoicTheAztec    schedule 29.10.2017
comment
Этот код работает для электронного письма, отправленного администратору, но не клиенту. - person Mujtaba K; 29.10.2017
comment
@MujtabaK Обновлено: поскольку электронное уведомление о новом заказе отправляется только администраторам, я добавил уведомления по электронной почте о заказах на удержание и заказах на обработку заказов в операторе if… Таким образом, клиент также получит их. - person LoicTheAztec; 29.10.2017
comment
Я обновил код, но не могу его проверить. На странице оформления заказа отображается полоса ошибок внутреннего сервера. - person Mujtaba K; 30.10.2017
comment
Кроме того, когда я пытался проверить отправку электронного письма через бэкэнд, он перенаправил меня на post.php с ошибкой Ошибка анализа: синтаксическая ошибка, неожиданный '$ formated_line_subtotal' (T_VARIABLE) в / home / clickableco / public_html / demo3 / wp-content / plugins /woocommerce/templates/emails/email-order-items.php в строке 72 - person Mujtaba K; 30.10.2017
comment
@MujtabaK Извините, в конце if( has_term( $categories, 'product_cat', $product->get_id() ) && ( $email_id == 'new_order' || $email_id == 'customer_processing_order' || $email_id == 'customer_on_hold_order' ) ) отсутствует )… на этот раз он должен работать - person LoicTheAztec; 30.10.2017