取消设置的会话不适用于 Woo Commerce add_filter
Unset session not working with Woo Commerce add_filter
我不确定为什么,但我试图在将自定义数据添加到 Woo Commerce cat 后取消设置会话,但它不起作用。
这是我正在尝试的代码。
add_filter('woocommerce_add_cart_item_data','wdm_add_item_data',11,2);
if(!function_exists('wdm_add_item_data')){
function wdm_add_item_data($cart_item_data,$product_id){
global $woocommerce;
session_start();
if (isset($_SESSION['custom_user_data'])) {
$option = $_SESSION['custom_user_data'];
$new_value = array('wdm_user_custom_data_value' => $option);
}
if(empty($option)){
return $cart_item_data;
}else{
if(empty($cart_item_data)){
return $new_value;
}else{
return array_merge($cart_item_data,$new_value);
}
}
unset($_SESSION['custom_user_data']);
}
}
但是未设置的会话在这里不起作用。
有人帮帮我吗??
谢谢
You should need to it unset before returning anything in your filter hooked function…
Because after is too late.
因此您将重新排列您的代码:
## ==> Unset before
unset($_SESSION['custom_user_data']);
## ==> Return after
if(empty($option)){
return $cart_item_data;
}else{
if(empty($cart_item_data)){
return $new_value;
}else{
return array_merge($cart_item_data,$new_value);
}
}
Now instead you could use dedicated Woocommerce WC_Session
this way:
1)设置WC_Sessions中的数据:
$value = "the value to be set";
if( empty( WC()->session->get( 'custom_user_data' ) ) )
WC()->session->set( 'custom_user_data', $value );
2) 将会话数据添加到购物车:
add_filter( 'woocommerce_add_cart_item_data', 'custom_user_cart_item_data', 11, 2 );
function custom_user_cart_item_data( $cart_item_data, $product_id ){
$cart_session_custom_data = WC()->session->get('custom_user_data');
if( empty($cart_session_custom_data) ) return $cart_item_data;
// Set the data
$cart_item_data['custom_data']['user_value'] = $cart_session_custom_data;
$cart_item_data['custom_data']['unique_key'] = md5( microtime().rand() );
return $cart_item_data;
}
代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件。
已测试并有效。
我不确定为什么,但我试图在将自定义数据添加到 Woo Commerce cat 后取消设置会话,但它不起作用。 这是我正在尝试的代码。
add_filter('woocommerce_add_cart_item_data','wdm_add_item_data',11,2);
if(!function_exists('wdm_add_item_data')){
function wdm_add_item_data($cart_item_data,$product_id){
global $woocommerce;
session_start();
if (isset($_SESSION['custom_user_data'])) {
$option = $_SESSION['custom_user_data'];
$new_value = array('wdm_user_custom_data_value' => $option);
}
if(empty($option)){
return $cart_item_data;
}else{
if(empty($cart_item_data)){
return $new_value;
}else{
return array_merge($cart_item_data,$new_value);
}
}
unset($_SESSION['custom_user_data']);
}
}
但是未设置的会话在这里不起作用。 有人帮帮我吗?? 谢谢
You should need to it unset before returning anything in your filter hooked function…
Because after is too late.
因此您将重新排列您的代码:
## ==> Unset before
unset($_SESSION['custom_user_data']);
## ==> Return after
if(empty($option)){
return $cart_item_data;
}else{
if(empty($cart_item_data)){
return $new_value;
}else{
return array_merge($cart_item_data,$new_value);
}
}
Now instead you could use dedicated Woocommerce
WC_Session
this way:
1)设置WC_Sessions中的数据:
$value = "the value to be set";
if( empty( WC()->session->get( 'custom_user_data' ) ) )
WC()->session->set( 'custom_user_data', $value );
2) 将会话数据添加到购物车:
add_filter( 'woocommerce_add_cart_item_data', 'custom_user_cart_item_data', 11, 2 );
function custom_user_cart_item_data( $cart_item_data, $product_id ){
$cart_session_custom_data = WC()->session->get('custom_user_data');
if( empty($cart_session_custom_data) ) return $cart_item_data;
// Set the data
$cart_item_data['custom_data']['user_value'] = $cart_session_custom_data;
$cart_item_data['custom_data']['unique_key'] = md5( microtime().rand() );
return $cart_item_data;
}
代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件。
已测试并有效。