我有一个订单ID(~400(列表,这些订单ID目前未处于正确的订单状态,我需要更改,我还想更新他们的付款方式。
解决这个问题的最有效和最好的方法是什么?
到目前为止,我的思维过程是有一个订单ID数组,运行它们,然后$order->update_status( 'custom-status' )
每个订单ID。但是,我不确定运行它以确保服务器不会超时并且可以批量执行等的最佳方法。
要更新订单 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()
,因为它会非常重(并且它会向客户发送通知,以获取特定的订单状态(