结帐后 Woocommerce 会话的可用性?

Availability of Woocommerce Session after checkout?

我目前正在使用 Woocommerce 会话来保存用户在购物车页面上输入的信息,这会影响添加到交易中的费用。

我需要在订单完成后立即访问此信息,以便对用户帐户进行必要的更新。

我认为 woocommerce_thankyou 会是一个很好的钩子,但不幸的是,会话似乎只有一半时间可用。

有没有更好的钩子可以用来确认购买已经完成并且会话信息可用?

您需要将该会话数据保存为自定义订单元数据,以便之后能够使用它(将下面代码中的 my_key 替换为正确的会话密钥):

// Add custom order meta data with temporary data from WC_Session
add_action( 'woocommerce_checkout_create_order', 'add_session_data_as_custom_order_meta_data', 10, 2 );
function add_session_data_as_custom_order_meta_data( $order, $data ) {
    if ( $session_data = WC()->session->get('my_key') ) {
         $order->update_meta_data( '_session_data', $session_data );
    }
}

代码在您的活动子主题(或主题)的 function.php 文件中。已测试并有效。


然后要访问数据,您将在 WC_Order 对象上使用 WC_Data 方法 get_meta()

$session_data = $order->get_meta('_session_data');

或者也使用定义的 订单 ID 中的 get_post_meta() 函数:

$session_data = get_post_meta( $order_id, '_session_data', true );