Изменение всех заказов Woocommerce с «на удержании» на «выполнено» - PullRequest
0 голосов
/ 11 марта 2020

Я пытаюсь программно изменить все заказы в магазине Woocommerce с «В ожидании» на «Завершено». Я мог бы легко сделать это в MySQL, но, к сожалению, мне нужны триггеры завершения заказа woocommerce, чтобы назначить лицензионные ключи существующим заказам. Я делаю это на промежуточном сервере, где все электронные письма отключены, чтобы избавить всех от головной боли.

До сих пор я пробовал следующий код, но, похоже, он не работает вообще.

function schedule_on_hold_complete() {
  if ( ! wp_next_scheduled( 'on_hold_complete' ) ) {
    wp_schedule_event( time(), 'quarterly', 'on_hold_complete' );
  }
}
add_action( 'init', 'schedule_on_hold_complete' );


function on_hold_complete() {
  $args = array(
    'post_type'         => 'shop_order',
    'posts_per_page'    => -1,
    'post_status'       => 'wc-on-hold',
);

$orderList = get_posts($args);

foreach ($orderList as $orderPost) {
    $order = new WC_Order($orderPost->ID);
    $order->update_status('completed');
  }
}
add_action( 'on_hold_complete', 'on_hold_complete' );

Я не получаю никаких отзывов от приведенного выше кода. Любая помощь будет принята с благодарностью!

1 Ответ

1 голос
/ 11 марта 2020

После некоторой консультации от замечательных людей здесь я смог найти проблему. Особая благодарность @CKMacleod, @HowardE за запуск моего мозга!

Итак, ЕСЛИ ВАМ НУЖНО ИСПОЛЬЗОВАТЬ это, чтобы обновить запуск пакета (как я) или просто обновить набор заказов в наборе, здесь это код! Имейте в виду, что это будет отправлять электронные письма «Заказать завершен», как если бы вы делали это в администраторе.

Примечание: я использую WP-CLI для запуска команды, которую я регистрирую в конце. msgstr "wp on_hold_complete". Также обратите внимание, что для большого сайта это, вероятно, довольно неэффективно, этот код заставляет сайт 500 через http, но команда CLI работает отлично. Просто убедитесь, что что-то отражено в l oop, чтобы вы знали, что он работает.

/**
 * Change all on hold orders when action is triggered.
 */
function on_hold_complete() {
  $args = array(
    'post_type'         => 'shop_order',
    'posts_per_page'    => -1,
    'post_status'       => 'wc-on-hold',
);

$orderList = get_posts($args);

foreach ($orderList as $orderPost) {
    $order = new WC_Order($orderPost->ID);
    $order->update_status('completed');
  }
}
WP_CLI::add_command( 'on_hold_complete', 'on_hold_complete' );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...