2017-07-26 153 views
1

我目前在WooCommerce网站上遇到了一些问题。有成千上万的旧订单处于“处理”状态。 这些订单已收到付款并且产品已发货。Woocommerce批量更改订单状态

我想将这些订单标记为完整,而不发送完成的订单电子邮件。我想使用下面的SQL查询来实现这一点。

update wp_posts set post_status = 'wc-completed' where post_type = 'shop_order' and post_status ='wc-processing' ; 

我是否需要更换其他表格或者这项工作?

感谢

编辑: 上面的代码工作完美的我。

+0

你并不需要改变其他表...这个SQL查询尽可能完美...然后[**这里是自动完成付款订单**的方式](https://stackoverflow.com/a/35689563/3730754)以避免再次发生这种情况。 – LoicTheAztec

回答

0

如果您只更改订单状态,则不需要更新任何其他表。请注意,您也可以在WordPress中实现这一点:

$args = array(
    'post_type'   => 'shop_order', 
    'posts_per_page' => -1, 
    'post_status'  => 'wc-processing', 
); 

$orderList = get_posts($args); 

foreach ($orderList as $orderPost) { 
    $order = new WC_Order($orderPost->ID); 
    $order->update_status('completed'); 
} 

...虽然直接的SQL查询几乎肯定会在这种情况下更快。

此外,如果你想一旦他们已经支付了自动命令转换为completed,您可以添加以下过滤器:

function myWooAutoCompleteOrder($orderID) { 

    // Only continue if we have $orderID 

    if (!$orderID) { 
     return; 
    } 

    // Get order 

    $order = wc_get_order($orderID); 

    // Update order to completed status 

    if ($order) { 
     $order->update_status('completed'); 
    } 
} 

add_filter('woocommerce_thankyou', 'myWooAutoCompleteOrder'); 
+0

不会从WordPress内部完成它意味着订单完整的电子邮件发送? 谢谢 – user3215838

+0

@ user3215838如果您有选项选中已完成的电子邮件,那么是;第一部分代码将向客户发送电子邮件。你可以暂时关闭它,但正如我所说的:如果你为数千个旧命令执行此操作,则最好通过SQL来完成此操作,并且SQL行应该没问题。 – indextwo