我正在尝试允许用户从我的帐户面板更新其订阅的订单项。我可以从订阅ID获取订阅并显示更新表单。现在,我通过订阅中的产品项目向我们展示了
$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时,我需要删除订单项。这可能吗?
因为我没有看到删除项目方法。
由于
答案 0 :(得分:4)
所以我能够完成这项工作。
注意:我使用自定义字段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) )
)
));
}
}
答案 1 :(得分:3)
通常在woocommerce中,当付款后生成订单时(我的意思是checkout => thankyou),您不能再编辑订单详细信息。更新数量,删除/添加项目是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
'post_id' => '413'
meta_key
表中的总计> '_order_total'
在这种情况下使用 update_post_meta()
功能。
但这不起作用,因为下一次预定的订阅付款由付款网关(paypal或其他人)处理,您无法更改任何数量的订阅。强>
当预定订阅到期时,WooCommerce将生成由此支付网关触发的新订单。
唯一的方法是取消订阅并从头开始生成新流程......