取消设置会话不使用Woo Commerce add_filter

时间:2017-11-07 06:01:48

标签: php wordpress session woocommerce cart

我不确定为什么但是我想在将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']);
  }
}

但是未设置的会话在这里不起作用。 有人帮我吗? 感谢

1 个答案:

答案 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文件中,或者放在任何插件文件中。

经过测试和工作。