结帐后 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 );
我目前正在使用 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 );