Как создавать фиды через WP-CLI и системный cron в плагине YML for Yandex Market (Y4YM)

Для владельцев интернет‑магазинов на WooCommerce с обширным ассортиментом (тысячи товаров и более), использующих плагин YML for Yandex Market, стандартная генерация фида через админку может оказаться недостаточно эффективной.

Основные сложности при работе с крупными каталогами:

  • Прерывание процесса из‑за тайм‑аута (превышения лимита времени выполнения скрипта).
  • Длительное время генерации, которое может составлять десятки минут или даже часы.
  • Высокая нагрузка на сервер, приводящая к замедлению сайта во время сборки фида.

Решение — использовать WP-CLI и внешний планировщик задач (cron). Это позволяет запускать сборку фида автоматически, в фоне, без нагрузки на админку и браузер.

В этой инструкции я расскажу, как это сделать — пошагово, даже если вы раньше не работали с командной строкой.

Что такое WP-CLI?

WP-CLI — это инструмент командной строки для управления WordPress. Представьте, что вы можете выполнять действия на сайте (обновлять плагины, создавать пользователей, генерировать фиды) прямо в терминале сервера — без открытия браузера.

Начиная с версии 5.3.0 плагин YML for Yandex Market поддерживает WP-CLI и предоставляет специальные команды для:

  • Запуска генерации фида;
  • Проверки статуса;
  • Автоматизации через WP-Cron.

Теперь, когда вы узнали, что такое WP-CLI, давайте пошагово разберемся, как им пользоваться для работы с плагином YML for Yandex Market.

Шаг 1: Убедитесь, что у вас есть доступ к SSH

WP-CLI работает только на серверах с доступом по SSH. Это значит, что:

  • Обычные shared-хостинги (например, Timeweb, Beget Starter) — не подходят.
  • Подходят: VPS, выделенные серверы, облачные хостинги (DigitalOcean, AWS, Hetzner), а также продвинутые тарифы Beget/VPS.

Если вы не знаете, есть ли у вас SSH — спросите у поддержки хостинга.

Шаг 2: Проверьте, установлен ли WP-CLI

Подключитесь к серверу через SSH. Используйте программу PuTTY или терминал при помощи команды:

ssh вашпользователь@вашсервер.ru

Перейдите в папку вашего сайта. Например:

cd /var/www/mysite.ru

И проверьте, установлен ли WP-CLI:

wp --info

Если вы увидите что-то вроде:

PHP binary: /usr/bin/php
PHP version: 8.1.2
...

— отлично, WP-CLI работает.

Если команда wp не найдена — её нужно установить. Инструкция по установке: https://wp-cli.org/ru/

Шаг 3: Узнайте ID своего фида

Каждый фид в плагине имеет ID — цифру, по которой система его определяет.

Как найти ID:

  1. Зайдите в админку WordPress → Y4YM. Откроется страница "YML for Yandex Market - Список фидов".
  2. Наведите мышкой на нужный фид и под его названием появится ID.
Как узнать ID фида YML в плагине Y4YM

Запомните этот номер — он понадобится в командах.

Шаг 4: Запустите генерацию фида вручную

Теперь запустим сборку фида вручную, чтобы убедиться, что всё работает.

Выполните команду (подставьте свой feed_id, в моём случае это цифра 6):

wp y4ym generate --feed_id=6

Если всё в порядке, вы увидите примерно такой вывод:

Feed #1. The maximum step execution according to the settings is 28 seconds
Feed #1. Creating feed headers.
Feed #1. Creating temporary feed files. The number of processed products: 120 / 1500 (8.0%)
...
Feed #1. The creation of the feed has been completed successfully!

Это означает, что фид успешно собран.

Команда generate использует пошаговую генерацию — идеально для больших каталогов. Она безопасна и не вызывает таймаутов.

Альтернатива: Быстрая генерация (для малых фидов)

Если у вас менее 1000 товаров, можно использовать команду quick:

wp y4ym quick --feed_id=6

Она создаёт фид за один проход — быстрее, не разбивая процесс генерации на кусочки. Однако такой подход рискованнее при больших количествах товаров из-за высокой вероятности зависания скрипта, а также повышенному расходу ресурсов сервера.

Для автоматизации лучше использовать generate.

Шаг 5: Настройка автоматического запуска (через cron)

Теперь сделаем так, чтобы фид обновлялся каждый день в одно и то же время — например, ночью при помощи серверного крона.

Откройте редактор cron-задач:

crontab -e

Добавьте строку:

0 3 * * * cd /var/www/mysite.ru && wp y4ym generate --feed_id=6 --allow-root > /dev/null 2>&1

Разберём по частям:

  • 0 3 * * * — запускать каждый день в 3:00 утра.
  • cd /var/www/mysite.ru — перейти в папку сайта.
  • wp y4ym generate --feed_id=6 — команда генерации фида №6.
  • --allow-root — разрешает запуск от имени root (часто нужно на VPS).
  • > /dev/null 2>&1 — не выводить логи (чтобы не засорять систему).

После сохранения фид будет обновляться автоматически каждую ночь.

Продвинутый пример: Автоматическая замена домена и отправка на сервер

Допустим, вы сменили домен или хотите отправлять фид на другой сервер (например, в рекламное агентство).

Можно расширить команду в cron:

0 3 * * * cd /var/www/mysite.ru && \
wp y4ym generate --feed_id=1 --allow-root && \
sed -i 's|staryi-dom.ru|novyi-dom.ru|g' wp-content/uploads/feed-yml-1.xml && \
rsync -av wp-content/uploads/feed-yml-1.xml user@remote-server:/feeds/

Что делает этот скрипт:

  1. Генерирует фид,
  2. Заменяет старый домен на новый в XML,
  3. Отправляет файл на удалённый сервер.

Возможные проблемы и решения

ПроблемаРешение
Command 'wp' not foundУстановите WP-CLI: curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar && chmod +x wp-cli.phar && sudo mv wp-cli.phar /usr/local/bin/wp
Фид не обновляетсяПроверьте путь к сайту, права на запись в wp-content/uploads, активность плагина
Ошибка доступа к базеУбедитесь, что wp-config.php доступен и корректен
Не работает --allow-rootДобавьте флаг — он нужен, если вы запускаете команду от имени root

Когда использовать WP-CLI?

Используйте этот способ, если:

  • Вы отказались от Вордпресовского крона в пользу серверного;
  • У вас более 1000 товаров;
  • Вы хотите полностью автоматизировать обновление фида;
  • У вас VPS или выделенный сервер;
  • Вы готовы работать с командной строкой.

Теперь ваш фид будет обновляться без участия человека, стабильно и без ошибок. Удобно, надёжно, профессионально.

Рейтинг: 0

2026-03-26 / / 0 комментариев / YML for Yandex Market / , , , , ,