Для сайтов на WordPress с функционалом интернет-магазина или приема заказов часто возникает задача автоматизировать изменение статусов заказов. Это упрощает работу менеджеров, повышает скорость обработки заказов и улучшает взаимодействие с клиентами. В этой статье подробно разберем, как настроить автоматическое переключение статусов заказов, используя стандартные возможности WordPress и WooCommerce, а также примеры кода для расширения функционала под свои нужды.
Почему важна автоматизация статусов заказов в WordPress
Автоматизация управления статусами заказов позволяет:
- Сократить время обработки заказов без участия администратора.
- Минимизировать ошибки и забывчивость при смене статусов.
- Автоматически уведомлять клиентов о текущем состоянии заказа.
- Интегрировать дополнительные бизнес-процессы, например, генерацию счетов или запуск доставки.
Особенно это актуально для сайтов с большим объемом заказов и сложными сценариями обработки.
Обзор стандартных статусов заказов в WooCommerce
Если ваш сайт на базе WooCommerce, то в нем по умолчанию есть такие статусы заказов:
- pending — ожидает оплаты;
- processing — заказ принят и обрабатывается;
- on-hold — заказ на удержании, например, ожидает подтверждения;
- completed — заказ выполнен;
- cancelled — отменен;
- refunded — возврат средств;
- failed — оплата не прошла.
Понимание этих статусов важно для правильной автоматизации.
Пример автоматического перевода заказов из статуса «в обработке» в «завершен» через заданное время
Частая задача — автоматически переводить заказ из статуса processing в completed спустя, например, 2 дня после оплаты, если не требуется дополнительного подтверждения.
Для этого добавим следующий код в functions.php вашей темы или создадим небольшой плагин:
add_action('wporder_automate_order_status_transition', 'wporder_change_status_processing_to_completed');
function wporder_change_status_processing_to_completed() {
$args = [
'limit' => -1,
'status' => 'processing',
'date_modified' => '<' . ( time() - 2 * DAY_IN_SECONDS )
];
$orders = wc_get_orders($args);
foreach ($orders as $order) {
$order->update_status('completed', 'Автоматическое изменение статуса после 2 дней обработки');
}
}
// Запускаем задачу через WP-Cron каждый час
add_action('wporder_schedule_hourly', 'wporder_automate_order_status_transition');
if (!wp_next_scheduled('wporder_schedule_hourly')) {
wp_schedule_event(time(), 'hourly', 'wporder_schedule_hourly');
}
Этот код:
- Ищет все заказы со статусом
processing, которые не менялись более 2 дней. - Меняет их статус на
completedс комментарием. - Запускает эту проверку каждый час с помощью WP-Cron.
Добавление кастомных статусов заказов и их автоматизация
Иногда стандартных статусов WooCommerce недостаточно, и нужно добавить свои, например, «ожидает сборки» или «отгружен на доставку». Для этого используем фильтры:
add_filter('wc_order_statuses', 'wporder_add_custom_order_statuses');
function wporder_add_custom_order_statuses($order_statuses) {
$order_statuses['wc-awaiting-assembly'] = _x('Ожидает сборки', 'Order status', 'wporder');
$order_statuses['wc-shipped'] = _x('Отгружен на доставку', 'Order status', 'wporder');
return $order_statuses;
}
add_action('init', 'wporder_register_custom_order_statuses');
function wporder_register_custom_order_statuses() {
register_post_status('wc-awaiting-assembly', [
'label' => 'Ожидает сборки',
'public' => true,
'exclude_from_search' => false,
'show_in_admin_all_list' => true,
'show_in_admin_status_list' => true,
'label_count' => _n_noop('Ожидает сборки <span class="count">(%s)</span>', 'Ожидает сборки <span class="count">(%s)</span>', 'wporder')
]);
register_post_status('wc-shipped', [
'label' => 'Отгружен на доставку',
'public' => true,
'exclude_from_search' => false,
'show_in_admin_all_list' => true,
'show_in_admin_status_list' => true,
'label_count' => _n_noop('Отгружен <span class="count">(%s)</span>', 'Отгружен <span class="count">(%s)</span>', 'wporder')
]);
}
После регистрации статусов можно создавать правила автоматизации. Например, переводить заказ в wc-shipped автоматически через 1 день после wc-awaiting-assembly:
add_action('wporder_schedule_daily', 'wporder_automate_custom_status_transition');
function wporder_automate_custom_status_transition() {
$args = [
'limit' => -1,
'status' => 'awaiting-assembly',
'date_modified' => '<' . ( time() - DAY_IN_SECONDS )
];
$orders = wc_get_orders($args);
foreach ($orders as $order) {
$order->update_status('shipped', 'Автоматический перевод заказа в статус "Отгружен" через день');
}
}
if (!wp_next_scheduled('wporder_schedule_daily')) {
wp_schedule_event(time(), 'daily', 'wporder_schedule_daily');
}
Уведомления клиентов при смене статусов заказов
Чтобы пользователи всегда были в курсе статуса своих заказов, полезно настраивать уведомления по email. WooCommerce поддерживает уведомления для стандартных статусов, но для кастомных их нужно добавить вручную.
Вот пример подключения email-уведомления при переходе заказа в статус wc-shipped:
add_filter('woocommerce_email_actions', 'wporder_add_custom_email_actions');
function wporder_add_custom_email_actions($actions) {
$actions[] = 'woocommerce_order_status_shipped';
return $actions;
}
add_action('woocommerce_order_status_shipped', 'wporder_send_shipped_email_notification');
function wporder_send_shipped_email_notification($order_id) {
$order = wc_get_order($order_id);
if (!$order) return;
// Используем стандартный класс WC_Email_Customer_Completed_Order как пример
$mailer = WC()->mailer();
$mails = $mailer->get_emails();
if (!empty($mails['WC_Email_Customer_Completed_Order'])) {
$mails['WC_Email_Customer_Completed_Order']->trigger($order_id);
}
}
Для более сложных сценариев можно создавать свои классы писем или использовать плагин Clearfy Pro, который расширяет управление уведомлениями.
Практические советы по отладке и расширению автоматизации
При внедрении автоматизации стоит учитывать следующие моменты:
- Тестируйте код на стенде перед запуском на живом сайте, чтобы избежать сбоев.
- Используйте WP-Cron ответственно, не создавайте слишком частые задачи, чтобы не перегружать сервер.
- Логируйте действия, например, через error_log или отдельные файлы, чтобы отслеживать работу автоматизации.
- Расширяйте функционал с помощью плагинов, если не хотите писать весь код вручную. Например, Expert Review позволяет создавать сложные правила для заказов.
Подключение сторонних плагинов для автоматизации
Если вы хотите увеличить возможности автоматизации, рассмотрите плагины, которые интегрируются с WooCommerce:
- Quizle — для сбора дополнительной информации перед сменой статуса.
- WPRemark — для работы с отзывами и комментариями к заказам.
Эти решения помогут настроить комплексную автоматизацию бизнес-процессов на вашем сайте.