Woocommerce 批量更改订单状态

use*_*838 5 mysql wordpress woocommerce

我目前在使用 WooCommerce 网站时遇到一些问题。有数千个旧订单停留在“处理中”状态。这些订单已收到付款,产品已发货。

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

update wp_posts set post_status = 'wc-completed' where post_type = 'shop_order' and post_status ='wc-processing' ;
Run Code Online (Sandbox Code Playgroud)

我还需要更改其他表吗?或者这可行吗?

谢谢

编辑:上面的代码对我来说非常有效。

ind*_*two 1

如果您只是更改订单状态,则不需要更新任何其他表。请注意,您也可以在 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');
}
Run Code Online (Sandbox Code Playgroud)

...尽管在这种情况下直接 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');
Run Code Online (Sandbox Code Playgroud)