Как отобразить метаданные элемента в подтверждении по электронной почте, используя woocommerce_order_item_meta_end - PullRequest
0 голосов
/ 31 октября 2019

Наш магазин продает программное обеспечение, и мы добавляем код ваучера на каждый купленный продукт. После того как покупка завершена (через хук woocommerce_payment_complete), мы генерируем код ваучера и добавляем его к каждому предмету, приобретенному с помощью метода wc_add_order_item_meta .

Суммированный код:

add_filter('woocommerce_payment_complete', 'add_voucher_code');

function add_voucher_code( $order_id ) {

    $order = new WC_Order( $order_id );
    $items = $order->get_items();

    foreach ($items as $item)   {

        for ($i = 1; $i <= $item['qty']; $i++)  {
            $voucher_code = 'API request based on order information to get voucher code';
            wc_add_order_item_meta($item->get_id(), 'Voucher Code', $voucher_code);
        }
    }     
}

По той или иной причине пользовательская мета элемента отображается на странице подтверждения заказа, но не отображается в электронном письме с подтверждением. ( проблема 1 шлепает по лбу) Итак, мы используем хук woocommerce_order_item_meta_end, чтобы добавить его в электронное письмо с подтверждением. ( wc_get_order_item_meta )

Обобщенный код:

add_action('woocommerce_order_item_meta_end', 'email_confirmation_display_order_items', 10, 4);

function email_confirmation_display_order_items($item_id, $item, $order, $plain_text) {

    echo '<div>Voucher Code: '. wc_get_order_item_meta( $item_id, 'Voucher Code') .'</div>';
}

Проблема 2 заключается в том, что добавленный фрагмент кода отображается на обеих страницах подтверждения заказа (так что теперь это показывает дважды) и в электронном письме с подтверждением заказа. (снова хлопает себя по лбу)

Текущая проблема 2 Решение
Сейчас мы решили ее, добавив предложение if, которое предлагается здесь . Примерно так:

// Only on emails notifications
if( ! (is_admin() || is_wc_endpoint_url() )) {
    echo '<div>Voucher Code: '. wc_get_order_item_meta( $item_id, 'Voucher Code') .'</div>';
}

Это похоже на исправление бинтов, и любые идеи и предложения будут высоко оценены. Спасибо!

1 Ответ

0 голосов
/ 06 ноября 2019

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

Проблема 1 Решение
добавленные метаданные товара отображаются на странице подтверждения заказа и не отображаются в электронном письме с подтверждением. Мы решили эту проблему, используя хук woocommerce_order_item_meta_end для добавления мета дополнительного элемента.

Решение проблемы 2
Добавление метаданных элемента через woocommerce_order_item_meta_end к электронному письму с подтверждением также добавляет его на страницу подтверждения (визуально дублируя его). Мы решили это, добавив оператор if, предложенный @LoicTheAztec здесь .

add_action('woocommerce_order_item_meta_end', 'email_confirmation_display_order_items', 10, 4);

function email_confirmation_display_order_items($item_id, $item, $order, $plain_text) {

    // Only on emails notifications
    if( ! (is_admin() || is_wc_endpoint_url() )) {
        echo '<div>Voucher Code: '. wc_get_order_item_meta( $item_id, 'Voucher Code') .'</div>';
    }
}

Ресурсы
хук подтверждения электронной почты, визуальное руководство
wc_get_order_item_meta docs
Отфильтровывать нежелательные метаданные элемента заказа из почтовых уведомлений Woocommerce

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...