在以编程方式添加 WooCommerce 订单之前设置可变产品价格
Set Variable Product Price before adding in WooCommerce order programatically
在购物车中,我添加了一个按钮来创建报价单。我使用的是数量范围定价插件,因此我所有的可变产品都有广泛的定价范围。
例如。当数量低于 100 时,产品 A 的商品成本为 5 美元。当数量为 100 至 199.
时,商品成本为 3 美元
我的购物车显示了正确的商品成本,我设法检索了每个购物车商品的产品价格。但是,我无法设置变化价格和添加数据到订单中。
有谁知道我该如何解决这个问题?
// Now we create the order
$order = wc_create_order();
// add products from cart to order
$items = WC()->cart->get_cart();
foreach($items as $item => $values) {
$_product = apply_filters( 'woocommerce_cart_item_product', $values['data'], $values, $item );
$tieredPrice = WC()->cart->get_product_price($_product);
$product_id = $values['product_id'];
$product = wc_get_product($product_id);
$quantity = (int)$values['quantity'];
$var_id = $values['variation_id'];
$variationsArray = array($values['variation']);
$var_product = new WC_Product_Variation($var_id);
$var_product->set_variation_price($tieredPrice); //how do I set variation price?
$order->add_product($var_product, $quantity, $variationsArray);
}
提前致谢。
在购物车中 $values['data']
已经是 WC_Product
对象的实例,因此对于 产品变体 它直接是 [=13] 的实例=] 对象,所以现在这很简单。
WC_Product 对象不存在 set_variation_price()
方法,它是 set_price()
…
因此您重新访问的代码将是:
// Now we create the order
$order = wc_create_order();
// Add products from cart to order
$cart = WC()->cart; // cart object
foreach( $cart->get_cart() as $cart_item_key => $cart_item) {
$product = $cart_item['data']; // An instance of the WC_Product object
$qty = intval($cart_item['quantity']); // The quantity
$tierced_price = $cart->get_product_price($_product); // your "tierced" price
$product->set_price( $tierced_price ); // <== <== <== <== <== <== SET THE PRICE
$args = array( $cart_item['variation'] ); // empty if not a variation
$order->add_product( $product, $qty, $args );
}
这应该有效
在购物车中,我添加了一个按钮来创建报价单。我使用的是数量范围定价插件,因此我所有的可变产品都有广泛的定价范围。
例如。当数量低于 100 时,产品 A 的商品成本为 5 美元。当数量为 100 至 199.
时,商品成本为 3 美元我的购物车显示了正确的商品成本,我设法检索了每个购物车商品的产品价格。但是,我无法设置变化价格和添加数据到订单中。
有谁知道我该如何解决这个问题?
// Now we create the order
$order = wc_create_order();
// add products from cart to order
$items = WC()->cart->get_cart();
foreach($items as $item => $values) {
$_product = apply_filters( 'woocommerce_cart_item_product', $values['data'], $values, $item );
$tieredPrice = WC()->cart->get_product_price($_product);
$product_id = $values['product_id'];
$product = wc_get_product($product_id);
$quantity = (int)$values['quantity'];
$var_id = $values['variation_id'];
$variationsArray = array($values['variation']);
$var_product = new WC_Product_Variation($var_id);
$var_product->set_variation_price($tieredPrice); //how do I set variation price?
$order->add_product($var_product, $quantity, $variationsArray);
}
提前致谢。
在购物车中 $values['data']
已经是 WC_Product
对象的实例,因此对于 产品变体 它直接是 [=13] 的实例=] 对象,所以现在这很简单。
WC_Product 对象不存在 set_variation_price()
方法,它是 set_price()
…
因此您重新访问的代码将是:
// Now we create the order
$order = wc_create_order();
// Add products from cart to order
$cart = WC()->cart; // cart object
foreach( $cart->get_cart() as $cart_item_key => $cart_item) {
$product = $cart_item['data']; // An instance of the WC_Product object
$qty = intval($cart_item['quantity']); // The quantity
$tierced_price = $cart->get_product_price($_product); // your "tierced" price
$product->set_price( $tierced_price ); // <== <== <== <== <== <== SET THE PRICE
$args = array( $cart_item['variation'] ); // empty if not a variation
$order->add_product( $product, $qty, $args );
}
这应该有效