Отобразить пользовательское поле продукта с помощью крючка «woocommerce_email_order_meta» в уведомлении администратора WooCommerce по электронной почте

#wordpress #woocommerce #hook-woocommerce #email-notifications

Вопрос:

В моих продуктах есть пользовательское поле под названием depot. Мне нужно отображать это поле только в уведомлениях администратора по почте, а не в сводке заказов клиентов или уведомлениях по почте клиентов.

Я использую этот код для получения пользовательского поля в уведомлениях по электронной почте :

 add_action( 'woocommerce_email_order_meta', 'add_depot', 10, 3 );    function add_depot( $order, $sent_to_admin, $plain_text ){  $items = $order-gt;get_items();   foreach ( $items as $item ){  $depot = $item-gt;get_meta('depot');  $item['name'] = 'Dépôt: ' . $depot . $item['name'];  }  }  

На данный момент это поле отображается только в электронных письмах клиентов, а не в электронных письмах администраторов, как мне бы хотелось. Я думаю, что мне нужно использовать $sent_to_admin, но я не уверен, как это сделать.

Спасибо.

Ответ №1:

У woocommerce_email_order_meta крючка есть 4 аргумента, с помощью $email-gt;id которых вы можете настроить целевые уведомления по электронной почте

Таким образом, вы получаете:

 function action_woocommerce_email_order_meta( $order, $sent_to_admin, $plain_text, $email ) {  // Targetting specific email notifications  $email_ids = array( 'new_order' );    // Checks if a value exists in an array  if ( in_array( $email-gt;id, $email_ids ) ) {  // Get items  $items = $order-gt;get_items();   // Loop trough  foreach ( $items as $item ) {  // Get meta  $depot = $item-gt;get_meta( 'depot' );   // NOT empty  if ( ! empty ( $depot ) ) {  echo 'lt;p style="color:green;font-size:50px;"gt;Dépôt: ' . $depot . ' - ' . $item-gt;get_name() . 'lt;/pgt;';  } else {  echo 'lt;p style="color:red;font-size:50px;"gt;Data not found!lt;/pgt;';  }  }  } } add_action( 'woocommerce_email_order_meta', 'action_woocommerce_email_order_meta', 10, 4 );  

Комментарии:

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

2. @Malcom Я вижу следующее объяснение этому. Ваши метаданные не существуют, или вы используете неверный метакей. Смотрите мой измененный ответ. Если это все еще не имеет значения. Тогда это связано с влиянием других плагинов и/или используемой вами темы. Поскольку мой ответ работает в настройках WordPress WooCommerce по умолчанию

3. Это работает, большое вам спасибо.

Ответ №2:

Вы можете реализовать этот крючок:

 do_action( 'woocommerce_email_order_meta', $order, $sent_to_admin, $plain_text, $email );  

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

Дайте мне знать, если это поможет.