Отображение настраиваемого уведомления в электронных письмах на основе максимального значения настраиваемого поля элемента

На WooCommerce у меня есть настраиваемое поле days_manufacture для каждого продукта с разными (целыми) значениями.

Также у меня есть этот код, который отображает сообщение на странице корзины с наибольшим значением «дни изготовления»:

add_action('woocommerce_before_cart', 'days_of_manufacture');
function days_of_manufacture() {
$day_txt = ' ' . __('day', 'your_theme_domain_slug' );
$days_txt = ' ' . __('days', 'your_theme_domain_slug' );
$text = __('Your Order will be produced in: ', 'your_theme_domain_slug' );
$max_days = 0;

foreach( WC()->cart->get_cart() as $cart_item )
if($cart_item['days_manufacture'] > $max_days)
$max_days = $cart_item['days_manufacture'];

if($max_days != 0) {
if ($max_days == 1)
$days_txt = $day_txt;

$output = $text . $max_days . $days_txt;
echo "<div class='woocommerce-info'>$output</div>";
}
}

Теперь я хотел бы отобразить это сообщение в письмах.

Как мне этого добиться?

Спасибо

1

Решение

Вы можете сделать это, немного изменив функцию этот ответ на ваш предыдущий вопрос и я дополнительно подключаю эту функцию к woocommerce_email_before_order_table крючок для писем с уведомлениями о заказах

Таким образом, вы замените эту существующую функцию на эту. И вы заменяете также вставленную функцию в обоих шаблонах (увидеть ниже).

Эта функция может обрабатывать отображение вашего пользовательского динамического сообщения в шаблонах (как и раньше) и в ваших почтовых уведомлениях.

Вот код:

add_action('woocommerce_email_before_order_table', 'days_of_manufacture_view_order_and_email', 99);
function days_of_manufacture_view_order_and_email($order, $type='email') {
$day_txt = ' ' . __('day', 'your_theme_domain_slug' );
$days_txt = ' ' . __('days', 'your_theme_domain_slug' );
$max_days = 0;

// Your customized style for the email template (to adapt for your needs)
$style = 'border:solid 2px #ededed; padding:10px; font-weight:bold;';

// Your customized text goes in here
$text = __('Your Order will be produced in: ', 'your_theme_domain_slug' );

foreach( $order->get_items() as $item )
if(get_post_meta($item['product_id'], 'days_manufacture', true) > $max_days )
$max_days = get_post_meta($item['product_id'], 'days_manufacture', true);

if($max_days != 0) {
if ($max_days == 1)
$days_txt = $day_txt;

$output = $text . $max_days . $days_txt;

// displayed on the email notifications
if($type == 'email')
echo "<div class='woocommerce-info' style='$style'>$output</div>"; // <== Customize the styles if needed
// displayed on the woocommerce templates
else
echo "<div class='woocommerce-info' style='display:block !important;'>$output</div>"; // displayed on the templates
}
}

Этот код находится в файле function.php вашей активной дочерней темы (или темы), а также в любом файле плагина.

Изменения шаблонов

Теперь в обоих шаблонах в вашей активной дочерней теме (или теме) woocommerce папка шаблонов:

Вы измените эту строку:

<?php days_of_manufacture_order_view($order); // <== inserted Here ?>

По этой строке:

<?php days_of_manufacture_view_and_email($order, 'template'); // <== inserted Here ?>

Теперь пользовательское уведомление также отображается на электронных письмах и продолжает работать Thankyou Посмотреть заказ страница и на

My account > Orders > view orderстраницы тоже.


Рекомендации:

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]