Загрузка...

WP Queue: фоновые задачи в WordPress

Что делать, если сайту надо отправить тысячу писем, импортировать сотни товаров или синхронизировать заказы с внешней системой? Если выполнять это прямо во время клика пользователя, страница «зависнет», браузер выдаст ошибку таймаута, а сервер может упасть.

Решение — откладывать тяжёлую работу в очередь и выполнять её позже, в фоне. В этой статье разберём плагин WP Queue: зачем он нужен, как устроен, чем отличается от привычного WP-Cron и Action Scheduler, и как начать им пользоваться.
https://github.com/tikhomirov/wp-queue
https://packagist.org/packages/rwsite/wp-queue


1. Проблема: пользователь не должен ждать

Представьте интернет-магазин. Покупатель нажимает «Оформить заказ». В этот момент сайту нужно:

  • списать товар со склада;
  • отправить письмо клиенту;
  • отправить письмо менеджеру;
  • синхронизировать заказ с кассовой системой;
  • обновить статистику.

Если делать всё сразу, пока браузер ждёт ответа, заказ может оформляться 5–10 секунд. На слабом хостинге — и того больше. Покупатель увидит белый экран или ошибку 504.

Гораздо лучше:

  1. Сохранить заказ.
  2. Положить все остальные операции в очередь.
  3. Мгновенно показать пользователю «Спасибо за заказ».
  4. Выполнить фоновые операции позже — за доли секунды или минуты.

Именно это и делает 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);

Screenshot_20260726_004115

Шаг 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(...));

Screenshot_20260726_003841

Шаг 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 и демона. Это позволяет начать просто и масштабироваться, не переписывая код.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *