Настройка мета элемента заказа только для уведомлений администратора WooCommerce по электронной почте
Мне нужно добавить пользовательскую таксономию в электронные письма администратора нового заказа, но не в электронные письма клиентов. Мой текущий код отображает мою пользовательскую таксономию для каждого элемента заказа, но он отображается как в электронных письмах администратора, так и в письмах клиентов, чего я не хочу.
Просматривая email-order-items.php
, я не вижу способа использовать $sent_to_admin
в крючке, который я использую. Я что-то упускаю?
Как добавить свою пользовательскую таксономию только в электронные письма администратора, используя только крючки и фильтры?
add_action( 'woocommerce_order_item_meta_end', 'custom_woocommerce_order_item_meta_end', 10, 3 );
function custom_woocommerce_order_item_meta_end( $item_id, $item, $order ) {
$product = $item->get_product();
$locations = get_the_terms( $product->get_id(), 'my_custom_taxonomy' );
echo '<br/>';
echo '<div style="margin-top: 20px;">';
foreach( $locations as $location ) {
echo 'Location: <b>' . $location->name . '</b>';
echo '<br/>';
}
echo '</div>
}
1 answers
Это можно сделать с помощью переменной $GLOBAL
. Я тоже немного пересмотрел ваш код. Попробуйте это:
// 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;
## -------------------------- Your Code below -------------------------- ##
$taxonomy = 'my_custom_taxonomy'; // <= Your custom taxonomy
echo '<br/><div style="margin-top: 20px;">';
foreach( get_the_terms( $item->get_product_id(), $taxonomy ) as $term )
echo 'Location: <b>' . $term->name . '</b><br/>';
echo '</div>';
}
Код входит в function.php файл активной дочерней темы (или активной темы).
Протестировано и работает.