2017-07-26 97 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