Что делать, если сайту надо отправить тысячу писем, импортировать сотни товаров или синхронизировать заказы с внешней системой? Если выполнять это прямо во время клика пользователя, страница «зависнет», браузер выдаст ошибку таймаута, а сервер может упасть.
Решение — откладывать тяжёлую работу в очередь и выполнять её позже, в фоне. В этой статье разберём плагин WP Queue: зачем он нужен, как устроен, чем отличается от привычного WP-Cron и Action Scheduler, и как начать им пользоваться.
https://github.com/tikhomirov/wp-queue
https://packagist.org/packages/rwsite/wp-queue
1. Проблема: пользователь не должен ждать
Представьте интернет-магазин. Покупатель нажимает «Оформить заказ». В этот момент сайту нужно:
- списать товар со склада;
- отправить письмо клиенту;
- отправить письмо менеджеру;
- синхронизировать заказ с кассовой системой;
- обновить статистику.
Если делать всё сразу, пока браузер ждёт ответа, заказ может оформляться 5–10 секунд. На слабом хостинге — и того больше. Покупатель увидит белый экран или ошибку 504.
Гораздо лучше:
- Сохранить заказ.
- Положить все остальные операции в очередь.
- Мгновенно показать пользователю «Спасибо за заказ».
- Выполнить фоновые операции позже — за доли секунды или минуты.
Именно это и делает WP Queue.
2. Что такое WP Queue
WP Queue — это плагин (и библиотека) для WordPress, который добавляет в сайт полноценную систему фоновых задач: очереди, воркеры, планировщик, мониторинг и REST API.
Если коротко:
- вы описываете работу как Job (задание);
- отправляете его в Queue (очередь);
- Worker (воркер) забирает задание и выполняет;
- плагин следит за ошибками, повторными попытками и статусом.
По духу это близко к очередям в Laravel, но адаптировано под WordPress: работает на shared-хостинге, умеет WP-Cron + loopback, а при необходимости может работать с Redis и демоном.
3. Какие задачи решает
WP Queue полезен везде, где работа тяжёлая, массовая или не требует немедленного ответа пользователю.
| Задача | Почему в очередь |
|---|---|
| Импорт товаров из ERP/маркетплейса | Может занять минуты, не стоит держать браузер |
| Отправка email и SMS | Сторонние сервисы иногда тормозят |
| Генерация отчётов и выгрузок в Excel | Тяжёлая нагрузка на CPU и память |
| Обработка изображений (ресайз, водяной знак) | Долго и требовательно к памяти |
| Синхронизация с CRM, кассой, складом | Внешние API бывают недоступны |
| Очистка старых логов и временных файлов | Регулярная рутина |
| Массовая рассылка писем подписчикам | Нельзя отправлять всё за один запрос |
Ключевая идея: всё, что может подвесить страницу или выполняется регулярно, лучше делать в фоне.
4. Главные части системы
4.1. Job — задача
Это класс, в котором написано, что именно надо сделать. Например, отправить письмо.
class SendWelcomeEmailJob
{
public function __construct(
private int $userId,
) {}
public function handle(): void
{
// здесь логика отправки письма
}
}
4.2. Queue — очередь
Очередь — это «ящик» для задач. Задания лежат в ней по порядку и ждут, когда их заберёт воркер. Можно иметь несколько очередей: emails, imports, high-priority.
4.3. Worker — воркер
Это процесс, который достаёт задачи из очереди и выполняет их. Воркер может запускаться:
- по WP-Cron раз в минуту;
- сразу после добавления задачи через loopback;
- как постоянный демон на VPS/Docker.
4.4. Driver — хранилище
Где физически лежат задачи. WP Queue поддерживает несколько вариантов:
- database — в таблице
wp_options, подходит для shared-хостинга; - redis — быстрое хранилище в памяти, хорошо для высокой нагрузки;
- memcached — аналог Redis;
- sync — выполняет задачу сразу, без очереди, удобно для отладки.
4.5. Trigger — пускач
То, что будит воркера:
- Loopback — WordPress сам себе шлёт неблокирующий HTTP-запрос, чтобы воркер стартовал сразу.
- WP-Cron — страховка, раз в минуту проверяет, не остались ли задачи.
- Демон — постоянно крутится в фоне и сам следит за очередью.
5. Режимы работы
WP Queue умеет работать в двух режимах.
5.1. cron_loopback (по умолчанию)
Подходит для большинства хостингов, включая shared.
- Задача стартует сразу после отправки через loopback.
- WP-Cron раз в минуту перепроверяет очередь на случай, если loopback не сработал.
- Демон не нужен.
Настройка минимальна:
define('WP_QUEUE_DRIVER', 'database');
Всё остальное работает само.
5.2. daemon
Подходит для VPS, Docker и production.
- Loopback и WP-Cron отключаются.
- Нужно запустить долгоживущий процесс-воркер, который сам следит за очередью.
- Задачи стартуют мгновенно, не нужно ждать cron.
Пример запуска через WP-CLI:
wp queue work --daemon --memory=256
Или через systemd:
[Unit]
Description=WP Queue worker
After=network.target
[Service]
Type=simple
User=www-data
WorkingDirectory=/var/www/html
ExecStart=/usr/local/bin/wp queue work --daemon --memory=256
Restart=always
[Install]
WantedBy=multi-user.target
6. Чем WP Queue отличается от других плагинов
6.1. WP-Cron
WP-Cron — это планировщик WordPress, но он не умеет сам запускать задачи мгновенно. Он срабатывает только при посещении сайта или по настоящему системному cron.
WP Queue использует WP-Cron как подстраховку, но добавляет loopback и демон, поэтому задачи могут стартовать сразу.
6.2. Action Scheduler
Action Scheduler — мощный штатный планировщик WooCommerce. Он хорош для отложенных действий, но:
- хранит задачи в базе;
- не умеет loopback для мгновенного старта;
- не имеет встроенного демона;
- интерфейс админки слабее.
WP Queue более гибкий: выбор драйверов, демон, красивая админ-панель, WP-CLI, REST API.
6.3. WP Background Processing
Это популярная библиотека Delicious Brains. Она работает по принципу «база + loopback + cron» и не требует Redis.
WP Queue умеет тот же подход (database драйвер), но при желании может работать с Redis/Memcached и демоном, как «взрослая» очередь.
| Плагин | Драйверы | Мгновенный старт | Демон | REST API / CLI |
|---|---|---|---|---|
| WP-Cron | нет | нет | нет | нет |
| Action Scheduler | база | нет | нет | ограниченно |
| WP Background Processing | база | loopback | нет | нет |
| WP Queue | база, redis, memcached, sync | loopback | да | да |
7. Как начать пользоваться
Шаг 1. Установить плагин
Скопируйте плагин в wp-content/plugins/wp-queue, активируйте в админке. Если используете Composer:
composer require rwsite/wp-queue
Шаг 2. Выбрать драйвер
Для простого хостинга — база:
define('WP_QUEUE_DRIVER', 'database');
Для production с Redis:
define('WP_QUEUE_DRIVER', 'redis');
define('WP_REDIS_HOST', 'redis');
define('WP_REDIS_PORT', 6379);

Шаг 3. Создать задачу
use WPQueueWPQueue;
class SendReportJob
{
public function __construct(
private string $email,
private string $date,
) {}
public function handle(): void
{
// здесь собираем и отправляем отчёт
}
}

Шаг 4. Отправить задачу в очередь
WPQueue::dispatch(new SendReportJob('admin@example.com', '2026-07-25'));
Можно отложить, указать очередь или выполнить синхронно:
// через 5 минут
WPQueue::dispatch(new SendReportJob(...))->delay(300);
// в отдельную очередь
WPQueue::dispatch(new SendReportJob(...))->onQueue('reports');
// выполнить сразу, минуя очередь
WPQueue::dispatchSync(new SendReportJob(...));

Шаг 5. Запустить обработку
Если используете режим по умолчанию, ничего запускать не надо — задачи обработаются автоматически.
Если выбрали демон:
wp queue work --daemon --memory=256
Шаг 6. Смотреть статус
В админке WordPress появится раздел WP Queue, где видны:
- сколько задач в очереди;
- какой обработчик активен (WP-Cron + Loopback или демон);
- успешные и упавшие задачи;
- cron-события.

8. Простая аналогия
Представьте почтовое отделение.
- Job — письмо в конверте.
- Queue — почтовый ящик.
- Worker — почтальон, который забирает письма.
- Loopback — звонок в дверь: «Приходи сейчас, письмо уже лежит».
- WP-Cron — сосед, который заходит раз в минуту и проверяет, не осталось ли писем.
- Демон — почтальон, который сидит в отделении круглые сутки и мгновенно забирает каждое новое письмо.
9. Когда стоит выбрать WP Queue
Выбирайте WP Queue, если:
- нужны фоновые задачи с хорошим интерфейсом;
- важен мгновенный старт через loopback;
- планируете расти до Redis + демона;
- хотите WP-CLI и REST API;
- нужен мониторинг cron-событий в одной панели.
Может быть избыточно, если:
- сайт на shared-хостинге и задач совсем мало;
- достаточно простого WP-Cron с одним-двумя событиями;
- уже глубоко интегрирован Action Scheduler и он закрывает все потребности.
10. Итог
WP Queue — это современный способ делать фоновую работу в WordPress. Он закрывает главную боль: пользователь не ждёт, пока сайт отправит письма, обработает картинки или синхронизирует данные.
Плагин гибкий: на старте работает на обычном хостинге с базой данных, WP-Cron и loopback, а при росте проекта переключается на Redis и демона. Это позволяет начать просто и масштабироваться, не переписывая код.