【问题标题】:WooCommerce - cart item data null when attempting to update quantityWooCommerce - 尝试更新数量时购物车项目数据为空
【发布时间】:2019-02-22 14:05:45
【问题描述】:

Fatal error: Call to a member function get_tax_class() 指向 class-wc-cart-totals.php 的第 230 行的空错误。看起来购物车项目数据属性为空。我不确定为什么,希望对 WooCommerce 有更深入了解的人可以为我指明正确的方向。

这里的设置有点独特,我创建了自定义 API 端点来处理来自客户端的大部分 WooCommerce 交互。

我在尝试更新商品数量时遇到此错误。

/*Cart controls*/
function my_add_to_cart($request){
    $payload = $request->get_params();

    if ($payload['product_id']){
        $cart_item_key = WC()->cart->add_to_cart( $payload['product_id'], $payload['quantity'] );
    }

    return my_get_cart()[$cart_item_key];
}
function my_remove_cart_item($request){
    $payload = $request->get_params();

    if ($payload['cart_item_id']){
        $payload['success'] = WC()->cart->remove_cart_item( $payload['cart_item_id'] );
    } else {
        $payload['success'] = false;
    }

    return $payload;
}
function my_update_cart_item_quantity($request){

    $payload = $request->get_params();
    if ($payload['cart_item_id']){

        /*This is where the error is triggered in my API */
        $payload['success'] = WC()->cart->set_quantity( $payload['id'], $payload['quantity'], true );

    } else {
        $payload['success'] = false;
    }

    return $payload;
}

内部错误发生在这里:

get_items_from_cart(){
    $this->items = array();

    foreach ( $this->cart->get_cart() as $cart_item_key => $cart_item ) {
        $item                          = $this->get_default_item_props();
        $item->key                     = $cart_item_key;
        $item->object                  = $cart_item;
        $item->tax_class               = $cart_item['data']->get_tax_class();
        /*This line here*/
        $item->taxable                 = 'taxable' === $cart_item['data']->get_tax_status();
        $item->price_includes_tax      = wc_prices_include_tax();
        $item->quantity                = $cart_item['quantity'];
        $item->price                   = wc_add_number_precision_deep( $cart_item['data']->get_price() * $cart_item['quantity'] );
        $item->product                 = $cart_item['data'];
        $item->tax_rates               = $this->get_item_tax_rates( $item );
        $this->items[ $cart_item_key ] = $item;
    }
}

很明显$cart_item['data'] 在这里没有正确实例化,但我不明白为什么。

在这一点上,我有点不知所措。我希望有一些我做错了的事情,并且可以在我向开发人员报告一个可能的错误之前修复......

注意:通过我的 API 添加和删除项目就像一个魅力。

【问题讨论】:

    标签: php wordpress woocommerce


    【解决方案1】:

    一个小时的调试和整篇文章,我在 35 秒后发现这是一个不匹配的参数:

       $payload['success'] = WC()->cart->set_quantity( $payload['id'], $payload['quantity'], true );
    

    需要

       $payload['success'] = WC()->cart->set_quantity( $payload['cart_item_id'], $payload['quantity'], true );
    

    【讨论】:

      猜你喜欢
      • 2020-05-09
      • 2021-04-19
      • 1970-01-01
      • 1970-01-01
      • 2013-09-24
      • 2020-03-23
      • 2019-09-18
      • 1970-01-01
      • 2016-03-27
      相关资源
      最近更新 更多