WooCommerce:如何使用WooCommerce_Order_Item_Meta_end在电子邮件确认中显示项目元数据

时间:2019-10-30 作者:Ryan

我们的商店销售软件,我们正在为每个购买的软件添加一个软件凭证代码。购买完成后(通过woocommerce_payment_complete hook)我们生成凭证代码并将其添加到通过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);
        }
    }     
}
出于某种原因,项目自定义元会显示在订单确认页面上,但不会显示在确认电子邮件中。(problem 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>\';
}
Problem 2 添加的代码片段显示在订单确认页面(现在显示两次)和订单确认电子邮件中。(又拍了拍额头)

Current Problem 2 Solution
现在,我们通过添加一个if语句来解决这个问题here. 像这样:

// 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 个回复
最合适的回答,由SO网友:Ryan 整理而成

由于这没有太多的行动,我将把我们的创可贴作为当前的解决方案。

Problem 1 Solution
添加的项目元数据显示在订单确认页面上,而不显示在确认电子邮件上。我们通过利用woocommerce_order_item_meta_end 钩子添加额外的项目元。

Problem 2 Solution
通过添加项目元数据woocommerce_order_item_meta_end 确认电子邮件还将其添加到确认页面(明显重复)。我们通过添加@LoicTheAztec建议的if语句来解决这个问题here.

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>\';
    }
}
Resources
email confirmation hook visual guide
wc_get_order_item_meta docs
Filter out unwanted order item meta data from Woocommerce email notifications