【问题标题】:Unset session not working with Woo Commerce add_filter未设置会话不适用于 Woo Commerce add_filter
【发布时间】:2018-04-19 10:39:05
【问题描述】:

我不知道为什么,但我试图在将自定义数据添加到 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']);
  }
}

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

【问题讨论】:

  • 尝试查看此答案以了解如何正确启动会话:stackoverflow.com/a/21952510/8823906。然后,如果您仍想使用全局会话,请使用它。 WC 有自己的会话处理,所以既然你已经在使用 WC 为什么不使用他们的会话类WC()->session->set([key], [value]);

标签: php wordpress session woocommerce cart


【解决方案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 文件或任何插件文件中。

经过测试并且有效。

【讨论】:

  • 谢谢。工作正常,但我的问题是其他的。我使用两个 ajax 函数来添加产品,一个用于 woocommerce,另一个是我们的自定义函数。现在我删除了 woo 商务功能,我只使用了一个我们的自定义功能。我的问题就解决了。
猜你喜欢
  • 2020-10-19
  • 2020-11-22
  • 2017-11-05
  • 1970-01-01
  • 2019-06-29
  • 1970-01-01
  • 2018-09-22
  • 2012-07-13
  • 2016-07-06
相关资源
最近更新 更多