我不确定为什么但是我想在将Woo Commerce猫添加到自定义数据之后取消设置会话,但它无效。 这是我正在尝试的代码。
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']);
}
}
但是未设置的会话在这里不起作用。 有人帮我吗? 感谢
答案 0 :(得分:1)
你需要在过滤器挂钩函数中返回任何之前取消设置 ... 因为之后为时已晚。
因此,您将重新安排代码:
## ==> 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);
}
}
现在你可以用这种方式使用专用的Woocommerce
WC_Session
:
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文件中,或者放在任何插件文件中。
经过测试和工作。