首页 > 解决方案 > 发送有关 woocommerce 购物车更新的额外数据

问题描述

对于每个购物车项目,我在 WooCommerce 购物车中都有一个自定义输入字段。当有人单击更新购物车时,我想将额外数据发送到服务器并处理该数据并将其添加到当前购物车中。

我在任何地方都找不到如何做到这一点。这甚至可能吗?

我试过了:

$_POST 变量中的woocommerce_update_cart_action_cart_updated 自定义数据不可用

每次更改输入字段时,通过自定义 javascript运行 ajax 请求。但这会干扰更新 WooCommerce 购物车的常规方式。好多bug...

更新购物车之前的钩子 我找不到在更新购物车之前是否有发送额外数据的钩子。

标签: phpwordpresswoocommercecart

解决方案


最后,解决方案非常简单。由于购物车是常规 HTML 表单,您可以添加自定义输入数据。当购物车更新时,所有表单数据都被序列化并使用 ajax 发送。您只需要在输入字段上设置正确的名称属性。

它采取了以下步骤:

  1. 复制 woocommerce 购物车模板。
  2. 在购物车项目 foreach 循环中添加您的自定义输入
  3. 给它一个正确的名字。像这样:

     name="cart[<?php echo $cart_item_key; ?>][your_custom_key]"
    
  4. 使用钩子:

     woocommerce_update_cart_action_cart_updated
    
  5. 在这个钩子中,您可以轻松访问 $_POST['cart'] 变量并执行您的操作。例如:

    $cart = WC()->cart->cart_contents;
    
    // loop over the cart
    foreach($_POST['cart'] as $cartItemKey => $values) {
    
        $cartItem = $cart[$cartItemKey];
    
        $yourCustomValue = $values['your_custom_key'];
    
        // process the value, do something with it...
    
        $cartItem['your_custom_key'] = $yourCustomValue;
    
        WC()->cart->cart_contents[$cartItemKey] = $cartItem;
    
    }
    
  6. 等等瞧。现在,当您填写输入字段并更新购物车时,数据将存储在购物车中。现在,例如,您可以在存储新订单时保存额外的购物车数据或使用这些数据来计算费用。


推荐阅读