Woocommerce会话:woocommerce_get_cart_item_from_session

时间:2013-11-29 10:51:19

标签: php wordpress session woocommerce

我创建了一个主要遵循this guide的插件,它只是将一小部分数据添加到给定的产品中。

我知道Woocommerce已经做了一些改变outlined here

我遇到的问题是,当我将商品添加到购物车并访问购物车页面时,我会看到一个空白屏幕。我认为问题源于使用此过滤器:

  

的add_filter( 'woocommerce_get_cart_item_from_session' ...

如果我使用此过滤器评论该行,我的结帐页面可以正常工作(但没有将额外的详细信息添加到我的产品中)。我无法弄清楚为什么这个过滤器不起作用,或者它有什么问题?

woocommerce改变说:

  

WooCommerce 2.0不再使用PHP session_start函数,而是使用WordPress的瞬态,这很好,除非您的代码恰好依赖于$ _SESSION。

据我所见,我没有开始任何新的会话(我的代码与第一个链接的代码相同)。也许这是我服务器的问题?有任何想法吗?

1 个答案:

答案 0 :(得分:3)

我浏览了很多,我建议您阅读以下内容:

解决方案是挂钩并恢复您的自定义购物车项目数据。

示例代码:

add_filter( 'woocommerce_add_cart_item_data', function ( $cartItemData, $productId, $variationId ) {
    $cartItemData['myCustomData'] = 'someCustomValue';

    return $cartItemData;
}, 10, 3 );

add_filter( 'woocommerce_get_cart_item_from_session', function ( $cartItemData, $cartItemSessionData, $cartItemKey ) {
    if ( isset( $cartItemSessionData['myCustomData'] ) ) {
        $cartItemData['myCustomData'] = $cartItemSessionData['myCustomData'];
    }

    return $cartItemData;
}, 10, 3 );
To also show the data at the cart/checkout page you can use the following code:

add_filter( 'woocommerce_get_item_data', function ( $data, $cartItem ) {
    if ( isset( $cartItem['myCustomData'] ) ) {
        $data[] = array(
            'name' => 'My custom data',
            'value' => $cartItem['myCustomData']
        );
    }

    return $data;
}, 10, 2 );

现在最后的事情是在订单时保存数据:

add_action( 'woocommerce_add_order_item_meta', function ( $itemId, $values, $key ) {
    if ( isset( $values['myCustomData'] ) ) {
        wc_add_order_item_meta( $itemId, 'myCustomData', $values['myCustomData'] );
    }
}, 10, 3 );

你不必做任何其他事情,在后端显示数据,所有订单项元数据都会自动显示。

这是来自

How to retrieve cart_item_data with WooCommerce?

您必须将此内容添加到主题的functions.php文件中。例如。