#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 );
Если вы видите, второй параметр, который вы получаете в аргументах, — отправлен администратору. Так что, если это правда, то вы можете добавить свою пользовательскую мету.
Дайте мне знать, если это поможет.