以编程方式添加WooCommerce订单之前设置可变产品价格

时间:2018-01-15 09:00:41

标签: php wordpress woocommerce product orders

在购物车中,我添加了一个按钮来创建报价单。我正在使用数量范围定价插件,因此我的所有可变产品都有广泛的定价。

EG。当数量低于 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);
        }

提前谢谢。

1 个答案:

答案 0 :(得分:0)

购物车$values['data']已经是WC_Product对象的实例,因此对于产品差异,它直接是WC_Product_Variation对象的实例,因此现在这很简单。

对于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 );
}

这应该有效