Php 如何使用woocommerce\u order\u item\u meta\u end在电子邮件确认中显示项目元数据

Php 如何使用woocommerce\u order\u item\u meta\u end在电子邮件确认中显示项目元数据,php,wordpress,woocommerce,hook-woocommerce,Php,Wordpress,Woocommerce,Hook Woocommerce,我们的商店出售软件,我们正在为每一个购买的软件添加一个软件凭证代码。一旦购买完成(通过woocommerce\u payment\u completehook),我们将生成凭证代码并将其添加到通过方法购买的每个项目中 汇总代码: add_filter('woocommerce_payment_complete', 'add_voucher_code'); function add_voucher_code( $order_id ) { $order = new WC_Order( $

我们的商店出售软件,我们正在为每一个购买的软件添加一个软件凭证代码。一旦购买完成(通过
woocommerce\u payment\u complete
hook),我们将生成凭证代码并将其添加到通过方法购买的每个项目中

汇总代码:

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);
        }
    }     
}
问题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>';
}
//仅适用于电子邮件通知
if(!(is_admin()| | is_wc_endpoint_url()){
回显“凭证代码:”.wc_get_order_item_meta($item_id,'凭证代码');
}

这感觉就像一个创可贴修复,任何见解/建议都将非常感激。谢谢问题1解决方案
添加的项目元数据显示在订单确认页面上,而不显示在确认电子邮件上。我们通过使用
woocommerce\u order\u item\u meta\u end
hook添加额外的item meta来解决这个问题

问题2解决方案
通过
woocmerce\u order\u item\u meta\u end
向确认添加项目元数据 电子邮件还将其添加到确认页面(明显重复)。我们通过添加由建议的if语句来解决此问题

add_action('woocmerce_order_item_meta_end','email_confirmation_display_order_items',10,4);
功能电子邮件\u确认\u显示\u订单\u项目($item\u id、$item、$order、$plain\u text){
//仅适用于电子邮件通知
if(!(is_admin()| | is_wc_endpoint_url()){
回显“凭证代码:”.wc_get_order_item_meta($item_id,'凭证代码');
}
}
资源



您是专门使用
woocommerce\u order\u item\u meta\u end
进行放置,还是使用另一个钩子/过滤器。因为订购的每件商品都需要一个凭证代码,所以我认为另一个钩子是行不通的。(但我对此持开放态度)我是基于WooCommerce标准:。
// 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>';
}
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>';
    }
}