Я использую на WooCommerce пользовательское поле days_manufacture
для каждого продукта с разными (целыми) значениями.
Также я использую этот код, который отображает сообщение в уведомлениях по электронной почте с наибольшим значением «дни изготовления»:
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
}
}
Этот код прекрасно работает, но теперь я хотел бы отобразить это сообщение ТОЛЬКО в сообщениях электронной почты «Новый заказ», «Обработка заказа», «Задержка заказа» и «Неудачный заказ».
Как мне этого добиться?
Спасибо
Можно использовать условие, основанное на статусе заказа, чтобы настроить таргетинг только на определенные уведомления по электронной почте для отображения этого настраиваемого сообщения.
Вот ваш измененный код:
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') {
// Defining the undesired orders status
$not_this_statuses = array('wc-completed','wc-failed','wc-cancelled');
if(!in_array($order->post_status, $not_this_statuses)){
$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 вашей активной дочерней темы (или темы), а также в любом файле плагина.
Это проверено и работает.
Других решений пока нет …