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>';
}
}