Задача

Реализовать массовое обновление всех постов на сайте. С рекурсивной обработкой и прослушкой состояния через Hearbeat API.

Решаемые проблемы

Ошибка сервера по таймауту

Если данных много, в нашем случае постов около 50 000 штук. То попытка обработать их за один цикл — вешает сервер на глухо.

Нужно чтобы функция обрабатывала порциями весь массив и периодически сама себя перезагружала.

Решено через AJAX-механизм. По завершению обработки порции, функция сама себя вызывает через WP AJAX, с указанием новой порции через параметр $offset.

Прослушка через Hearbeat API

Встречал решения, где запуск новых порций требовал открытия клиентского окна. Это странно и хрупко.

Потому тут скрипт сам по себе работает на сервере. Сохраняя свои статусы в транзитном кеше WP (Transite Cache API).

А клиент если страниа открыта, прослушивает данные и выводит на страницу пользователя через WP Hearbeat API.

Реализация

Код тут https://github.com/systemo-biz/bulk-post-updater

Там все достаточно просто.

Вывод информации идет каждые 15 секунд на соответствующей странице в разделе инструментов:

[img attachment=»8430″ align=»alignnone» size=»large» alt=»Обновление всех постов ‹ CasePress — WordPress 2015-12-11 20-14-46″ /]

Если будут вопросы, задавайте.