当前位置: 首页 > 知识库问答 >
问题:

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

禹智渊
2023-03-14

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

当数量低于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个答案

滕翔飞
2023-03-14

在购物车中,$values['data']已经是WC\u Product对象的一个实例,因此对于产品变体,它直接是WC\u Product\u variation对象的一个实例,所以现在就简单了。

WC\u产品对象不存在set\u variation\u price()方法,它是set\u 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 );
}

这应该行得通

 类似资料:
  • 我试图以编程方式创建一个订单。使用非常简单: 这符合预期,并且为ID为100的简单产品创建了正确数量的订单。 然而,如果我尝试用一个变体来实现这一点,它的行为似乎并不正确。经过多次尝试和错误,我以这种方式完成了工作: 然而,尽管它确实创建了具有正确产品和正确变化ID的订单,订单的总数总是0(巧合的是,这是第一个变化的价格)。 最初我尝试的是

  • 我有一个产品属性变化,有选项-小-20美元中等-25美元大-30美元 因为商店里的所有产品都有相同的价格。 如何以编程方式设置属性值的价格? 当我将3个属性变体按钮添加为变体时,它们会显示在产品页面上。 如何更改产品的价格时,"小"选项选择编程方式,而不是设置价格的变化选项在管理面板。

  • 我有一个Woocommerce商店,里面有各种各样的产品。 我要给所有产品打八折,属于产品类别Cuckoo 现在我所要做的就是在我的functions.php中设定一个销售价格 它的做法如下: 如果我在计算后var_dump$sale_price的结果,我会得到正确的答案,但是前端的价格显示会击出正常价格,并将销售价格显示为正常价格。 是否有一个钩子/过滤器可以用来实现这一点? 我还尝试通过以下方

  • 我在网站上有一个表单,允许用户创建可预订的产品。但是,我找不到如何使用php函数创建可用性间隔。有人有主意吗? 下面是我如何创建我的产品 在这个项目的另一部分中,我使用get_post_元函数来获取可用性。我从文章中了解到可用性是元数据,但我不确定如何更改这些。我试着使用通常的

  • 基于在Woocommerce应答代码中添加产品属性列以编辑订单页面,我编写了以下函数: 它适用于简单产品,但不适用于可变产品,如何修复它?

  • 我试图以编程方式批量添加WooCommerce中的产品,但出于某种原因,它只是添加了第一个产品。我正在向一个应用程序发出请求,该应用程序返回带有产品名称和描述的JSON响应。到目前为止,我的代码看起来像下面的代码: