Информация о заказе пакетного изменения в качестве статуса заказа для определенных идентификаторов заказа Woocommerce - PullRequest
1 голос
/ 02 апреля 2019

У меня есть список идентификаторов заказов (~ 400), которые в настоящее время не находятся в правильном статусе заказа, который мне нужно изменить, я также хотел бы обновить их способ оплаты.

Какой самый эффективный и лучший способ подойти к этому?

До сих пор мой мыслительный процесс состоял в том, чтобы иметь массив идентификаторов заказов, проходить через них и затем $order->update_status( 'custom-status' ) на каждом из них. Однако я не уверен, что лучший способ запустить это, чтобы убедиться, что сервер не истечет время ожидания и может делать их в пакетах и ​​т. Д.

1 Ответ

0 голосов
/ 02 апреля 2019

Чтобы обновить статус заказа массива идентификаторов заказов, вы можете использовать множество способов (но всегда делайте резервную копию базы данных раньше или, по крайней мере, таблицу wp_posts) .

Примечание: Порядок Woocommerce post_status всегда начинается с wc-.

1) Лучший способ - использовать легкий вес,очень эффективный и уникальный SQL-запрос с WPDB классом WordPress, таким образом:

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) Другой способ (более тяжелый) заключается вОбновление статуса массива идентификаторов заказа заключается в использовании функции WordPress wp_update_post() в цикле foreach следующим образом:

$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(), так как он будет очень тяжелым (и он будет отправлять клиенту уведомление о конкретных статусах заказа)

...