WordPress по умолчанию использует систему WP-Cron для выполнения запланированных задач, таких как публикация отложенных записей, очистка временных данных и другие периодические операции. Однако WP-Cron запускается только при посещении сайта, что может привести к задержкам выполнения задач или их пропуску на сайтах с низкой посещаемостью. В этой статье мы подробно рассмотрим, как заменить WP-Cron на системный cron для надежного и точного запуска задач, а также приведем примеры кода и рекомендации по настройке.
Почему стоит отказаться от WP-Cron и использовать системный cron
WP-Cron реализован как эмуляция cron-задач на уровне приложения. Он запускается, когда кто-то посещает страницу сайта — это значит, что если трафик низкий, задачи могут запускаться с задержкой или не запускаться вовсе. Это критично для магазинов, сайтов с временными акциями, автоматических рассылок и других важных процессов.
Преимущества системного cron:
- Точное и своевременное выполнение задач без зависимости от трафика.
- Меньшая нагрузка на сайт, так как задачи запускаются отдельно.
- Возможность мониторинга и управления задачами на уровне сервера.
Для перехода на системный cron нужно отключить WP-Cron и настроить запуск PHP-скрипта WordPress cron через системный планировщик.
Как отключить WP-Cron в WordPress
Чтобы отключить WP-Cron, добавьте в файл wp-config.php следующую строку перед /* That's all, stop editing! Happy publishing. */:
define('DISABLE_WP_CRON', true);
Это предотвратит запуск WP-Cron при посещении сайта, и вы сможете настроить собственный cron-запуск.
Настройка системного cron для запуска WordPress cron задач
Для запуска задач WordPress через системный cron нужно добавить в планировщик сервера (crontab) команду, которая будет запускать скрипт wp-cron.php с помощью PHP.
Пример команды для crontab
Откройте crontab пользователя, под которым работает веб-сервер, или root (если у вас есть доступ):
crontab -e
Добавьте строку для запуска cron каждые 15 минут (интервал можно настроить по необходимости):
*/15 * * * * curl -s https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Или через PHP CLI, если есть доступ к командной строке PHP:
*/15 * * * * /usr/bin/php /path/to/wordpress/wp-cron.php >/dev/null 2>&1
Замените https://example.com на URL вашего сайта, а /path/to/wordpress/ — на реальный путь к WordPress.
Реализация кастомных cron задач с WP24
Часто возникает необходимость создавать собственные задачи, которые будут выполняться по расписанию. Для этого в WordPress существует функция wp_schedule_event. Рассмотрим, как добавить и обработать свою cron-задачу с префиксом функций wp24_ для предотвращения конфликтов.
Добавление задачи в расписание
function wp24_register_cron_event() {
if (! wp_next_scheduled('wp24_custom_cron_hook')) {
wp_schedule_event(time(), 'hourly', 'wp24_custom_cron_hook');
}
}
add_action('wp', 'wp24_register_cron_event');
Этот код проверяет, запланирована ли задача wp24_custom_cron_hook, и если нет — добавляет её для запуска каждый час.
Обработчик задачи
function wp24_custom_cron_function() {
// Здесь ваш код, который должен выполняться по расписанию
error_log('WP24 cron task executed at ' . current_time('mysql'));
}
add_action('wp24_custom_cron_hook', 'wp24_custom_cron_function');
В обработчике можно выполнять любые действия — например, очищать кэш, отправлять email, обновлять данные и т.д.
Отладка и мониторинг cron задач
Для контроля работы cron задач рекомендуем использовать плагин WP Crontrol. Он позволяет просматривать, добавлять, удалять и запускать задачи вручную прямо из панели администратора.
Также можно логировать выполнение ваших функций, используя error_log или специальные инструменты мониторинга серверных задач.
Использование плагина Clearfy для управления cron задачами
Если вы хотите упростить управление фоновой активностью сайта, обратите внимание на плагин Clearfy Pro. Он позволяет отключать ненужные cron задачи, оптимизировать нагрузку и управлять расписаниями без необходимости вручную редактировать код.
Резюме и лучшие практики
- Отключайте WP-Cron через
DISABLE_WP_CRONна сайтах с низким трафиком или когда нужна точность выполнения. - Настраивайте системный cron для надежного запуска
wp-cron.php. - Используйте префиксы для своих функций и хуков, например,
wp24_, чтобы избежать конфликтов. - Проверяйте и управляйте cron задачами с помощью плагина WP Crontrol.
- Для комплексной оптимизации и управления cron задачами рассмотрите Clearfy Pro от WPSHOP.
Такой подход позволит вам достичь стабильной и предсказуемой работы фоновых процессов WordPress, улучшить производительность сайта и избежать многих распространенных проблем с отложенным выполнением задач.