批量更改订单信息作为特定Woocommerce订单ID的订单状态

时间:2019-04-01 21:38:41

标签: php sql wordpress woocommerce orders

我有一个订单ID列表(〜400),这些列表当前不在我需要更改的正确订单状态中,我也想更新其付款方式。

最有效,最好的方法是什么?

到目前为止,我的思考过程是先要有一系列的订单ID,依次遍历它们,然后在每个$order->update_status( 'custom-status' )上运行。但是我不确定运行此方法的最佳方法,以确保服务器不会超时并且可以批量执行操作。

1 个答案:

答案 0 :(得分:0)

要更新订单ID数组的订单状态,您可以使用多种方法(但始终在数据库备份之前或至少在wp_posts表中进行备份)。。 >

注意:Woocommerce订单post_status始终以 wc- 开始。

1)最好的方法是通过WPDB WordPress类使用轻量级,非常有效且独特的SQL查询,方法是:

global $wpdb;

$new_status = 'wc-custom-status';
$product_ids = array(37, 53, 57, 63, 80); // The array of product Ids
$product_ids = implode(',', $product_ids);

$wpdb->query( "
    UPDATE {$wpdb->prefix}posts
    SET post_status = '$replacement_user_id'
    WHERE ID IN ($product_ids)
    AND post_type = 'shop_order'
" );

2)另一种方法(更重)是更新订单ID数组的状态:在foreach循环中使用WordPress wp_update_post()函数,这样:

$new_status = 'wc-custom-status';
$product_ids = array(37, 53, 57, 63, 80); // The array of product Ids
$product_ids = implode(',', $product_ids);

foreach ( $orders_ids as $order_id ) {
    wp_update_post( array('ID' => $order_id, 'post_status' => $new_status) );
}

这两个代码都经过测试并且可以工作。

您可以将代码嵌入到函数中,然后从钩子(甚至使用简码)中触发它。

我不建议您使用WC_Product方法update_status(),因为将会非常繁琐(并且会向客户发送通知,因为特定的订单状态)