在 WooCommerce 3 中删除订单项目后未保存重新计算的总计



我在Woocommerce网站上使用Wordpress 4.9.6和WooCommerce 3.4.2,我有一个自定义功能,可以为活动注册创建发票。

现在我正在处理一个脚本,该脚本只会从现有订单中删除一个项目。 项目删除精细,但总数不会重新计算。 我可以在 wp-admin 中查看订单并从那里重新计算总数,但我需要它在这个脚本中发生。

我一辈子都无法弄清楚是什么阻止了它的工作......

我的实际代码:

$order = wc_get_order($event_registration['OrderID']);
if ( count($order->get_items()) > 1 ) {
if ( !wc_delete_order_item($event_registration['OrderItemID']) ) {
return array('error' => 'Problem removing order item');
}
$updated_order = wc_get_order($event_registration['OrderID']);
if ( count($updated_order->get_items()) > 0) {
$updated_order->calculate_totals();
PluginWoo::update_invoice($updated_order->get_id());
return true;
} else {
if ( !wp_delete_post( $event_registration['OrderID'], true ) ) {
return array('error' => 'Problem deleting order after deleting items');
}
return true;
}
} else {
if ( !wp_delete_post( $event_registration['OrderID'], true ) ) {
return array('error' => 'Problem deleting order');
}
return true;
}

对此的任何帮助不胜感激。

在最新版本的WooCommerce中,如果要从订单中删除项目,可以使用Order类中的remove_item((方法。 举个例子:

$order = wc_get_order( 1111 );
foreach( $order->get_items() as $item_id => $items ) {
$order->remove_item( $item_id );
}
$order->calculate_totals();

谢谢

如果wc_delete_order_item()函数异步运行并且未在方法之前完成calculate_totals()则可以尝试改用WC_Datadelete()方法。

由于您的代码不是真正可测试的,我只是想知道。所以你可以尝试这样的事情:

$order = wc_get_order( $event_registration['OrderID'] );
$items = $order->get_items();
if ( count($items) > 1 ) {
if( isset( $items[$event_registration['OrderItemID']] ) )
$items[$event_registration['OrderItemID']]->delete(); // Deleting
else
return array('error' => 'Problem removing order item'); // Returning error
}
$updated_order = wc_get_order( $event_registration['OrderID'] );
$items = $updated_order->get_items();
if ( count($items) > 0 ) {
$updated_order->calculate_totals();
PluginWoo::update_invoice($updated_order->get_id());
return true;
} else {
if( isset( $items[$event_registration['OrderItemID']] ) )
$items[$event_registration['OrderItemID']]->delete(); // Deleting
else
return array('error' => 'Problem deleting order after deleting items');
return true;
}

它可以工作...

相关内容

  • 没有找到相关文章

最新更新