WP: синхронизация остатков и цен по расписанию (XML/CSV/API) — как оптимизировать с WP-Cron

Артур Хорошев
Артур Хорошев CEO Maya AI · Основатель «Ковчег»
Опубликовано:
синхронизация остатков и цен по расписанию в WP с использованием WP-Cron

WP: синхронизация остатков и цен по расписанию (XML/CSV/API) — как оптимизировать с WP-Cron

Вечер, 22:47, телефон вибрирует где-то под подушкой. Менеджер склада шлет CSV с остатками: «Срочно обновите, завтра придет проверка». Вы, конечно, молодец, переносите все в WooCommerce, жмете обновить и выдыхаете. Утром выдыхаете второй раз, когда звонит клиент: «Вы продали мне то, чего нет». Виноваты не вы, виноват тайминг. На сайте данные живут отдельно от реальности, а реальность любит бить по голове тем, кто не синхронизирует.

Я Артур Хорошев. Ниже — рабочая схема, как навести порядок в синхронизации остатков и цен в WordPress с помощью WP-Cron и автоматики через make.com. Без драм, с нормальными примерами, с теми мелочами, из-за которых обычно все и ломается. Если интересно копнуть глубже и прокачать автоматизации под ваши процессы, пригодятся мои материалы и обучение: Обучение по make.com и готовые сценарии как подписка — Блюпринты по make.com. Хотите научиться автоматизации рабочих процессов с помощью сервиса make.com и нейросетей ? Подпишитесь на наш Telegram-канал.

Создание страницы сайта на автомате
Автоматизация из разряда «сделал и забыл». Так и должно быть с остатками и ценами.

Почему WP-Cron ведет себя как ленивый сторож и как его приструнить

WP-Cron в WordPress — это не настоящий cron, а имитация по событию. Он срабатывает, когда кто-то заходит на сайт. На сайтах с низким трафиком задачи могут подвисать минутами и часами, на нагруженных — стартовать несколько раз одновременно и бодаться за ресурсы. Для синхронизации цен и остатков это боль: вы либо опаздываете, либо грузите сервер, либо получаете гонки обновлений. Решение простое и скучное — отключить WP-Cron и подружить сайт с системным cron на сервере. С тех пор расписание будет выполняться по минутам, а не по погоде.

В wp-config.php ставим простой флажок, после которого WordPress перестанет дергать крон при каждом посещении, а будет ждать системный вызов. Тут нет магии, только дисциплина:

define('DISABLE_WP_CRON', true);

Дальше включаем системный cron. На VPS это одна строка в crontab, на shared-хостинге чаще дают веб-интерфейс. Суть одна — раз в 5 минут аккуратно дергать файл wp-cron.php.

*/5 * * * * php /var/www/site/public_html/wp-cron.php >/dev/null 2>&1

Если PHP-cli не доступен, можно использовать curl к вашему домену, но обязательно по https и по внутреннему адресу, чтобы не ловить лишние плагины кэширования по дороге. После этого расписание перестает быть «по вдохновению» и становится по секундам, как бухгалтерия любит.

Что именно синхронизируем и как это не сломать

В интернет магазине обычно живут две вещи, которые мечтают убежать в разные стороны: цена и остаток. Плюс вариации, статусы наличия, распродажи, иногда валюта и округления. Ключ практической жизни — каждый товар должен иметь стабильный внешний идентификатор. Идеально — артикул SKU. Именно по нему вы сопоставляете позиции, а не по названию «Кроссовки Nike 42 черные», которое поставщик вчера переименовал в «Кроссовки Nike Black 42» и сделал вид, что ничего не было. Если SKU нет, придумываем суррогат — код из системы учета, штрихкод, GUID, но пусть он будет один и навсегда.

Синхронизацию делим по типу данных. Остатки чаще меняются, их можно дергать хоть каждые 5 минут. Цены трогают реже — раз в день или при поступлении нового прайса. Смены статусов и распродаж — по мере необходимости. И да, лучше делать инкрементальные обновления: если у вас 50 тысяч SKU, то крутить каждый раз все позиции — это как таскать воду ведрами, когда рядом есть кран. Выгоднее обновлять только то, что изменилось.

Где брать данные: XML, CSV и API от 1С, МойСклад и друзей

Россия — страна CSV, XML и 1С. У поставщика может быть хоть CommerceML XML, хоть CSV на SFTP, хоть API МойСклад, иногда — Excel на почте, да. make.com как раз и нужен, чтобы не городить самостоятельно десятки интеграций. Он заберет файл с SFTP, распарсит XML, вызовет API, разложит все по колонкам, отфильтрует и отдаст в WooCommerce через REST API. Сценарий выглядит приземленно: по расписанию забираем источник, приводим к единому виду, маппим поля, обновляем магазин пакетами и пишем лог. Если источник нестабилен, ставим повторные попытки и таймауты, а еще лучше — резервный источник или буфер на своем сервере.

Для WooCommerce работаем через /wp-json/wc/v3. Авторизация — ключ и секрет, которые вы создаете в настройках WooCommerce, права ставим read/write, трафик только по https. Для больших партий у Woo есть пакетный метод products/batch, он экономит запросы и время. Важно обновлять по SKU: сначала ищем id продукта по метаполю _sku, потом шлем обновление. Это привычнее, чем пересоздавать карточки, и точно безопаснее для SEO, фото и отзывов.

Роль WP-Cron, когда рулит make.com

Синхронизация может жить и без WP-Cron, если весь график в make.com. Но удобнее разделить задачи. Пусть make.com по расписанию вытягивает источник и складывает результат в ваш WordPress через API или в промежуточную таблицу, а WP-Cron на стороне сайта запускает точечные сервисные процессы: прогрев кэша, пересчет вариаций, пересборку цен с налогами, чистку временных данных. Так меньше риск упереться в таймауты веб-сервера и легче масштабировать. Если очень хочется, можно сделать и наоборот — WP-Cron дергает ваш приватный вебхук в make.com, и сценарий там решает все целиком.

Make AI агент и инструменты автоматизации
Сценарии в make.com собираются как лего. Главное — один раз адекватно промапить поля.

Технические мелочи, которые спасают утро

Блокировка от наложения задач. Самая частая проблема — следующий запуск начинает работать, пока предыдущий еще крутится. Ставим легкий замок через опцию в БД. Перед стартом проверяем флаг, если процесс идет — выходим. Если процесс завис, таймаут снимает блокировку. Примерно так, без излишеств:

$lock = get_option('my_sync_lock');
if ($lock && time() - $lock < 15 * 60) { return; }
update_option('my_sync_lock', time());

// ... ваша синхронизация ...

delete_option('my_sync_lock');

Пакеты вместо одиночных запросов. Обновлять 500 позиций по одному запросу — это попросить сервер разозлиться. Лучше собирать по 50-100 товаров в один batch, особенно если дергаете вариации. На стороне make.com есть модули, которые аккуратно режут массивы на чанки, на стороне WooCommerce это сильно экономит на сетевых накладных.

Вариации и остатки. В WooCommerce остаток вариации хранится у вариации, а не у родителя. Когда поставщик отдает одну строку на модель без разбивки по размерам, придется раскладывать на стороне make.com: XL обновляется одной цифрой, M — другой. Это норм, но не пытайтесь пересоздавать вариации на лету каждый запуск. Лучше один раз подготовить структуру и дальше только обновлять qty и price.

Кэш и фронт. Любимый эффект: в админке остатки уже новые, на витрине старые. Виноваты кэширующие плагины и CDN. Лечится тонкой очисткой только затронутых страниц. После пакетного обновления соберите список product_id и очистите кэш по ним. Если в лоб — инвалидируйте кэш архива и фида. Только не выключайте кэш полностью, это выстрел в ногу.

Часовые пояса. В настройках WordPress ставим «Европа/Москва», в make.com тоже выставляем московское время для расписаний. Иначе ночные прайсы внезапно превращаются в утренние и бухгалтер снова смотрит на вас, как на эксперимент.

Сценарий make.com: живой пример

Возьмем кейс: поставщик отдает CSV на SFTP, в котором 60 тысяч строк, цены меняются раз в день, остатки — каждый час. В make.com настраиваем расписание. Ночью забираем цены, парсим CSV потоково, приводим к единой схеме с ключом SKU, пересчитываем валюту, округляем по правилам магазина. Дальше отправляем в WooCommerce батчами по 100 позиций, логируем результаты, а ошибки — в отдельный Google Sheet и в Telegram уведомление. Днем, каждые 10 минут, запускается короткий маршрут только для остатков. Он берет файл остатков, обновляет только qty, не трогая цены и статусы.

Если источник временно недоступен, маршрут делает три попытки с экспоненциальной паузой и уходит спать. Если недоступен ваш сайт, make.com аккуратно складывает неотправленные пакеты в очередь, а WP на своей стороне через WP-Cron чистит замки и обновляет только то, что реально приехало. Получается аккуратная схема без драм и ночных созвонов.

Бот для Telegram
Телеграм-уведомления о синхронизации экономят нервы. Ошибку заметили — ошибку починили.

Как не словить бан по ресурсу сервера

Уважайте лимиты. Даже если у WooCommerce нет жестких квот, у вашего сервера есть CPU, память и таймауты PHP-FPM. На пакетное обновление ставьте разумный рейт, например 10-15 батчей в минуту, и разносите тяжелые задачи по ночи. Action Scheduler, который живет в WooCommerce, отлично справляется с очередями, его можно дергать прямым импортом и пускать обработку в фоне. Сложные обновления перемещайте туда, чтобы не душить публичный сайт. И да, не включайте verbose-логирование на проде навсегда, логи тоже едят диск, иногда жадно.

Про деньги, курсы и здравый смысл

Есть соблазн сделать «быстрый импорт»: кнопка в плагине, заливаем CSV, готово. Он даже работает — один раз. Когда процессы становятся регулярными, восторг заканчивается, а начинается рутина. Обучиться нормальной автоматизации дешевле, чем месяцами тушить мелкие пожары. Я делаю курс по make.com, где показываю на живых сценариях, как привязывать API, парсить XML и CSV с российских сервисов, чинить узкие места и не терять заказы. А еще есть готовые сборки на базе типовых кейсов — Блюпринты по make.com. Хотите автоматизацию без боли и с людьми, которые отвечают, а не исчезают — присоединяйтесь. Ну или соберите сами, если руки чешутся, я не против.

Мини-кейс из практики

Интернет-магазин одежды с 38 тысячами SKU. Источник — МойСклад API, обновление остатков каждые 7 минут, цены — ночью. Сначала магазин падал от одиночных запросов и дублировал вариации, потому что разные названия размеров. Решение: жесткое сопоставление по SKU, пакетные обновления, замок на время работы, Action Scheduler для вариаций, отдельный модуль очистки кэша только по затронутым товарам. На стороне make.com — резка массивов на 80-товарные чанки, два маршрута, расширенный лог и уведомления в Telegram. Время синхронизации сократилось с 1 часа до 6 минут, продавцы перестали играть в угадайку «на складе что-то есть или его нет». Кофе снова стал вкусным, а не тревожным.

Чек на здравость

Если коротко: WP-Cron в одиночку — ненадежный напарник, но в паре с системным cron работает как часы. make.com вытягивает грязную работу по интеграции, а WooCommerce через REST и пакетные обновления понимает и принимает данные. Дальше все про дисциплину: SKU как ключ, блокировки, расписание, аккуратные логи, разумные лимиты и уведомления. И да, тестируйте на стейдже, а не на живом магазине. Иначе утром будет не кофе, а совещание.


FAQ

WP-Cron или системный cron — что выбрать для синхронизации?

Системный cron надежнее. Отключаем псевдо-крон в WordPress, запускаем wp-cron.php через cron на сервере. Так задачи идут по расписанию независимо от трафика на сайте. WP-Cron оставляем как интерфейс планировщика, но дергает его уже системный таймер.

Как часто обновлять остатки и цены, чтобы не убить сервер и не словить пересортицу?

Остатки — по 5-15 минут для ходовых категорий, остальные раз в 30-60 минут. Цены — ночью или 1-2 раза в день. Ставьте отдельные расписания и не мешайте разные типы данных в одну задачу. Так вы не будете гонять лишний трафик.

Поставщик высылает CSV на почту. Это вообще реально автоматизировать?

Реально. В make.com есть модули для IMAP, они забирают письма, вытаскивают вложения, складывают файл в облако или на SFTP и тут же запускают парсинг. Дальше как обычно — маппинг и обновление WooCommerce.

У нас 1С с CommerceML. Нужно писать свой импорт?

Не обязательно. В make.com можно распарсить XML CommerceML, но удобнее, когда 1С отдает нормализованный выгрузочный XML или JSON с ключом SKU и датой обновления. Если не получается, делайте преобразование в промежуточный формат на своей стороне и уже его отдавайте в магазин.

Как не получить дубликаты и гонки при одновременных запусках?

Ставьте блокировку задачи на уровне опции в БД и делайте разумный таймаут. Разносите обновления цен и остатков по времени. Используйте пакетные методы WooCommerce и не дергайте одну и ту же позицию несколькими сценариями.

Можно ли обойтись без программиста?

Если кейс типовой, да. make.com закроет 80 процентов задач мышкой. Останутся пара мест, где пригодится код — например, кастомная логика маппинга, расчеты или тонкий кэш. Для старта этого вполне достаточно. Если хотите ускориться — посмотрите обучение и мои блюпринты.

Как мониторить, чтобы узнать о сбое до того, как позвонит клиент?

Логи в make.com и в WordPress, плюс уведомления в Telegram при ошибках, нуле пустых остатков и при необычно длинном времени работы. Можно добавить контрольный счетчик измененных позиций и тревожиться, если цифра упала к нулю.

Shared-хостинг потянет такую схему?

Потянет, если не устраивать штурм. Ставьте частоту на разумном уровне, используйте пакетные обновления и выносите тяжелую обработку в make.com. Если упираетесь в лимиты — пора на VPS, дешевле, чем терять заказы.

Что с безопасностью ключей WooCommerce и доступов к API?

Храните ключи в переменных окружения или закрытых настройках, трафик только по https, ограничьте IP, если возможно. Не давайте прав больше, чем нужно, и ротируйте ключи раз в несколько месяцев. Банально, но работает.

Можно ли запускать обновление по событию, а не по расписанию?

Да. Поставщик может дергать ваш вебхук в make.com при изменении остатков. Это быстрее, чем ждать крон. Главное — иметь запасной план на случай, если вебхук не пришел, и ночной пересчет как страховку.

Часто задаваемые вопросы по теме (FAQ)

Для чего нужны AI-агенты и автоматизация в контенте?

AI-агенты (например, в связке с Make.com и Cursor) позволяют заменить рутинные задачи: сбор данных, написание постов, рерайт и даже автопостинг в Telegram или WordPress. Это экономит десятки часов в неделю и позволяет масштабировать бизнес без расширения штата.

Как быстро можно запустить свой контент-завод?

Базовый контент-завод (генерация текстов по RSS или из других источников) с автопостингом собирается без программирования (No-Code) за 1-2 дня. Сложные сценарии (с видео, аудио и кастомными MCP) внедряются за 1-2 недели.

Нужно ли уметь программировать?

Нет, большинство систем собираются визуально в Make.com (No-Code). Для сложных задач можно использовать вайбкодинг — генерацию кода с помощью Cursor AI через промпты на естественном языке.
Поделиться статьей:
Telegram VK
Ссылка скопирована в буфер обмена
Артур Хорошев
Автор материала

Артур Хорошев

CEO Maya AI · Основатель «Ковчег»

Делюсь реальным опытом по вайбкодингу, автоматизации процессов в Make.com и созданию ИИ-агентов в Cursor. Автор курса и закрытого клуба «Контент-завод».

Клуб практиков

Создавайте контент и сервисы с помощью ИИ-агентов

В клубе «Контент-завод» — 181 практическое занятие, закрытые эфиры дважды в неделю (веду лично), готовые связки Make.com, MCP-серверы и круглосуточная поддержка.