更新WooCommerce订阅订单项以编程方式
我试图让用户从他们的我的账户面板更新他们订阅的订单项。我能够从订阅ID获取订阅,并向他们显示更新表单。现在我告诉他们,在他们的订阅产品项目中,我通过更新WooCommerce订阅订单项以编程方式
$subscription = wcs_get_subscription($_GET['subscription']);
$subscription_items = $subscription->get_items();
得到了什么,我试图做的是允许用户更新他们的产品的数量。因此,如果他们更新数量,我想更新订阅的项目数量,以便将来的订单以更新的数量生成。 我看到WC_Abstract_Order
类中有update_product方法。我认为这是可以使用的,但我很困惑在这张票据的评论:
* Update a line item for the order.
*
* Note this does not update order totals.
我需要时,我用它来重新计算总额是多少? 另外,当数量为0时,我需要删除订单项。这可能吗?
由于我没有看到删除项目的方法。
感谢
所以我是能够使这项工作做如下。
- 从订阅对象中删除所有订单商品。
- 通过$ _POST运行以获取更改数量
- 将产品再次添加到订阅。
注意:我使用自定义字段price_level,因为它在订阅期间是动态定价的,我们想要使用它以便价格与订阅时相同。
//remove product items
$subscription->remove_order_items('line_item');
//add product item again
foreach($_POST['quantity'] as $product_id => $qty) {
if($qty > 0) {
//we will need to set dynamic prices based on cusotm field
$price_level = get_field('coffee_price_level', $subscription->id);
//Get the product
$product = wc_get_product($product_id);
//set the price
$product->set_price(floatval($price_level));
$tax = ($product->get_price_including_tax()-$product->get_price_excluding_tax())*$qty;
//subscription item price level
$subscription->add_product($product, $qty, array(
'totals' => array(
'subtotal' => $product->get_price(),
'subtotal_tax' => $tax,
'total' => $product->get_price(),
'tax' => $tax,
'tax_data' => array('subtotal' => array(1=>$tax), 'total' => array(1=>$tax))
)
));
}
}
通常在woocommerce当付款后产生的订单(我的意思是结账=>三江源),你不能再修改订单的详细信息。更新数量,删除/添加项目是WC购物车方法。
对于订阅插件,每个初始shop_order后期类型都有一个同时生成的初始shop_subscription后期类型和一个计划后期后期类型(并且后面的ID是相互关联的)。例如:
Initial (post type) 'shop_order' -> ID is 412
Initial (post type) 'shop_subscription' -> ID is 413 (and 'post_parent': 412)
Initial (post type) 'scheduled-action' -> ID is 414
你可以看到在你的数据库wp_posts
表。
我们可以在wp_postmeta
总表与相应的meta_key
'_order_total'
使用在这种情况下,update_post_meta()
功能已经更新了'post_id' => '413'
。
但是这不会起作用,因为下一个计划订购支付由支付网关(PayPal或其他)处理,并你不能改变的认购额。
当预定的订阅到期时,WooCommerce只会生成由此支付网关触发的新订单。
的唯一方法是取消订阅,并从一开始就产生一个新的进程......
谢谢你的回应。当我们查看订阅时,我看到在后端编辑订阅产品数量的可能性。那些如何处理?编辑数量时他们是否创建新订阅? – Yalamber
@Yalamber你不能真的编辑它,因为你正在改变金额,正如我所说,一旦订阅已订阅,WooCommerce不处理定期付款。这是由支付网关或银行(贝宝或其他人)处理的。即使您更改了woocommerce中的金额,该金额也不会在支付网关或银行中更新...并且付款将保持与第一次订单所定义的相同。 – LoicTheAztec
哦,我现在明白了,实际上我不需要更新支付网关上的金额。由于我将限制产品的总量相同,并且每个产品将具有相同的价格。我只需要提供改变不同产品之间数量的能力。 – Yalamber
嘿@Yalamber,你能够提供更多的上下文,只要你用来运行这个钩子?我现在正在做几乎完全相同的事情,我正在努力想出实现编辑表单的最佳方式。 –