Php 使用自定义选项WordPress/WooCommerce以编程方式将项目添加到购物车

Php 使用自定义选项WordPress/WooCommerce以编程方式将项目添加到购物车,php,wordpress,woocommerce,hook-woocommerce,Php,Wordpress,Woocommerce,Hook Woocommerce,我正在为一家电子商务商店编写插件 有时,这些项目具有与订购相关的设置成本 也就是说,如果你想要50顶蓝色帽子,你需要支付(50倍单位成本价格)+(1倍单位设置成本) 我需要找到一种方法,将单独的成本添加到购物车中,以反映这些设置成本 我想在计算购物车总数之前加入,如下所示: add_action( 'woocommerce_before_calculate_totals', 'update_custom_price', 1, 1 ); function update_custom_price(

我正在为一家电子商务商店编写插件

有时,这些项目具有与订购相关的设置成本

也就是说,如果你想要50顶蓝色帽子,你需要支付(50倍单位成本价格)+(1倍单位设置成本)

我需要找到一种方法,将单独的成本添加到购物车中,以反映这些设置成本

我想在计算购物车总数之前加入,如下所示:

add_action( 'woocommerce_before_calculate_totals', 'update_custom_price', 1, 1 );
function update_custom_price( $cart_object ) {
    foreach ( $cart_object->cart_contents as $cart_item_key => $value ) {
        $price = my_custom_calculate_func( $value );
        $value['data']->set_price($price);
    }
}

function my_custom_calculate_func( $cart_item ) {
  $product_id = $cart_item["product_id"];
  $qty = $cart_item["quantity"];

  if (!array_key_exists("_custom_options_one", $cart_item)) return $cart_item["price"];

  $option_one = $cart_item["_custom_options_one"];
  $option_two = $cart_item["_custom_options_two"];

  // setup cost product id == 30786
  if ($product_id != 30786) {

    $request_url = site_url() . "/?post_type=product"
      . "&add-to-cart=30786"
      . "&quantity=1"
      . "&custom_options_one=" . encodeURIComponent($option_one)
      . "&custom_options_two=" . encodeURIComponent($option_two)
      . "&custom_options_related_product_id=" . $product_id;
    error_log($request_url);
    $curl = new \MyApp\Http\Curl($request_url, array());
    $response = $curl->__toString();
  }

  $price = get_price_custom($product_id, $option_one, $option_two, $qty);
  $price = ($price == NULL) ? $cart_item["price"] : $price;

  return $price;
}
但是,尽管生成了正确的URL,但不会将项目添加到购物车中

我可以手动使用URL并输入项目,但它在钩子中不起作用


有谁能提出一个更好的方法来解决这个安装成本问题吗?

我不太明白有关卷曲的部分……为什么要使用它?这里…为什么不使用add_to-cart()方法。你的问题(对我来说)不是很清楚……我之所以使用它,是因为我不认为add_to_cart允许自定义选项,但看看API,我发现它可能会。如果仍然需要注意,我会再试一次并更新问题。我并没有真正理解关于卷曲的部分…你们为什么使用它?这里…为什么不使用add_to-cart()方法。你的问题(对我来说)不是很清楚……我之所以使用它,是因为我不认为add_to_cart允许自定义选项,但看看API,我发现它可能会。如果仍然需要注意,我将重试并更新问题。