【问题标题】:Woocommerce Sessions: woocommerce_get_cart_item_from_sessionWoocommerce 会话:woocommerce_get_cart_item_from_session
【发布时间】:2013-12-15 13:07:44
【问题描述】:

我创建了一个插件,主要遵循this guide,它只是向给定产品添加少量数据。

我知道 Woocommerce 进行了一些更改outlined here

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

add_filter('woocommerce_get_cart_item_from_session'...

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

woocommerce 的变化说:

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

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

【问题讨论】:

  • 黑屏?可能是致命错误,error_log 说什么?
  • 谢谢,从来没有开启过 wordpress 调试,所以不是错误,而是黑屏!
  • 现在它打开了,我明白了:警告:call_user_func_array() 期望参数 1 是一个有效的回调,数组必须在 /var/www/sitename/wp-includes/plugin 中有两个成员。第199行的php
  • 看起来过滤器已经不存在了?
  • 看起来不像真的! docs.woothemes.com/document/hooks - 我认为您可能需要使用 woocommerce_order_get_items 并获得您需要的项目。

标签: php wordpress session woocommerce


【解决方案1】:

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

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

示例代码:

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 文件中。

【讨论】:

    猜你喜欢
    • 2016-08-09
    • 2014-08-07
    • 2022-09-27
    • 2018-10-03
    • 2018-11-27
    • 2021-12-01
    • 2020-10-14
    • 2023-03-06
    • 2016-03-18
    相关资源
    最近更新 更多