取消设置的会话不适用于 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 文件或任何插件文件。

已测试并有效。