在保存订单并发送WooCommerce电子邮件通知之前,将订单ID添加到订单项元数据 [英] Add the order ID to the order item metadata before the order is saved and WooCommerce email notifications are sent

查看:9
本文介绍了在保存订单并发送WooCommerce电子邮件通知之前,将订单ID添加到订单项元数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要将具有订单ID和密码的链接添加到订单项元数据。

目前,我正在使用woocommerce_checkout_create_order_line_item操作将其他信息成功添加到项目元数据中,但当此操作正在运行时,订单ID仍无法访问(?)。

我是否可以通过其他方式完成此操作,以便在保存订单并向客户发送通知之前添加链接?

add_action( 'woocommerce_checkout_create_order_line_item', 'custom_checkout_create_order_line_item', 20, 4 );
function custom_checkout_create_order_line_item( $item, $cart_item_key, $values, $order ) {
    if( ! isset( $values['test_title'] ) ) { return; }

    // add test info as order item metadata
    if( ! empty( $values['test_title'] ) ) {
        $test_pw = wp_generate_password(); // generate a password
        $item->update_meta_data( '_test_id', $values['test_id'] ); // add test id
        $item->update_meta_data( '_test_password', $test_pw ); // add test access password
        $item->update_meta_data( 'Access link', // add test access permalink
            get_permalink( $values['test_id'] ) . '?order=' . $order->get_id() . '&pw=' . $test_pw );
    }
}

推荐答案

您的钩子在订单保存之前执行,并在"保存"步骤中确定订单ID。

因此,除非您可以在您的挂钩中包含此功能,否则我认为目前还没有办法知道订单ID。

但是,从您的问题中我了解到它与您希望在电子邮件中显示的项元数据有关。那么,是否可以选择使用woocommerce_order_item_meta_startwoocommerce_order_item_meta_end钩子,以便在wc_display_item_meta()WooCommerce函数的输出之前或之后添加其他产品信息:

function action_woocommerce_order_item_meta_start( $item_id, $item, $order, $plain_text ) {
    // On email notifications
    if ( ! is_wc_endpoint_url() && $item->is_type('line_item') ) {
        echo '<ul class="wc-item-meta"><li><strong class="wc-item-meta-label">Label</strong><p>Value order id = ' . $order->get_id() . '</p></li></ul>';
    }
}
add_action( 'woocommerce_order_item_meta_start', 'action_woocommerce_order_item_meta_start', 10, 4 );

这篇关于在保存订单并发送WooCommerce电子邮件通知之前,将订单ID添加到订单项元数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆