Php 使用自定义选项WordPress/WooCommerce以编程方式将项目添加到购物车
我正在为一家电子商务商店编写插件 有时,这些项目具有与订购相关的设置成本 也就是说,如果你想要50顶蓝色帽子,你需要支付(50倍单位成本价格)+(1倍单位设置成本) 我需要找到一种方法,将单独的成本添加到购物车中,以反映这些设置成本 我想在计算购物车总数之前加入,如下所示: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(
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,我发现它可能会。如果仍然需要注意,我将重试并更新问题。