Woocommerce Sessions: woocommerce_get_cart_item_from_session


Woocommerce Sessions: woocommerce_get_cart_item_from_session

我主要按照本指南创建了一个插件,它只需向给定的产品添加一小部分数据。

我知道Wooccommerce在这里做了一些更改。

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

add_filter('wocommerce_get_cart_item_from_session'…

如果我用这个过滤器评论行,我的结账页面就可以工作(但没有添加到我的产品中的额外细节)。我不知道为什么这个过滤器不工作,或者它有什么问题??

wooccommerce的变化说:

WooCommerce 2.0不再使用PHP session_start函数,而是使用WordPress的瞬态,这很好,除非你的代码碰巧依赖$_session。

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

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

解决方案是挂在那里,还恢复您的自定义购物车项目数据。

示例代码:

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 );

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

这是的

如何使用WooCommerce检索cart_item_data?

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