Heartbeat API в WordPress полезен для автосохранения, уведомлений о блокировке записи и части интерактивных сценариев в админке. Но на слабом хостинге или при большом количестве одновременно работающих редакторов он может создавать лишние AJAX-запросы к admin-ajax.php. В результате в панели растёт число обращений, а на некоторых сайтах это заметно по нагрузке на CPU и базе.
Отключать Heartbeat полностью не всегда разумно: можно потерять автосохранение и предупреждения о том, что запись уже редактируется. Практичнее ограничить его там, где он не нужен, и оставить в редакторе только при необходимости.
Когда Heartbeat действительно мешает
Проблема обычно проявляется не как одна большая ошибка, а как постоянный фон из запросов. Если открыть DevTools в браузере и посмотреть вкладку Network, можно увидеть повторяющиеся обращения к admin-ajax.php?action=heartbeat. На сайте с несколькими открытыми вкладками админки это быстро превращается в лишнюю нагрузку.
Типичные симптомы
- в админке подтормаживает переход между разделами;
- в логах хостинга много запросов к
admin-ajax.php; - редактор блоков периодически «дергается» из-за автосохранения;
- на shared-хостинге растёт время ответа панели без явной причины;
- нагрузка появляется даже тогда, когда сайт почти не посещают с фронтенда.
Важно не путать Heartbeat с обычным AJAX сайта. Если у вас уже есть тяжёлые плагины, кэш или проблемы с базой, отключение Heartbeat не исправит всё сразу. Но как точечная оптимизация админки это рабочий шаг.
Что лучше: отключить полностью или ограничить
Для большинства сайтов безопаснее не рубить Heartbeat целиком, а снизить частоту или отключить его только вне редактора. Ниже — короткое сравнение подходов.
| Подход | Что даёт | Минус |
|---|---|---|
| Плагин | Быстрое управление без кода | Дополнительная зависимость и лишний интерфейс |
| Код в теме или mu-plugin | Точный контроль над зонами отключения | Нужно аккуратно тестировать после обновлений |
| Полное отключение | Максимум экономии запросов | Ломает автосохранение и уведомления о блокировке |
Если задача — именно сократить нагрузку, а не убрать функциональность любой ценой, лучше начать с кода и отключать только ненужные части.
Пошаговое решение без лишнего риска
1. Сначала проверьте, где именно идёт нагрузка
Откройте админку, запустите DevTools и посмотрите сетевые запросы. Если admin-ajax.php?action=heartbeat повторяется каждые 15–60 секунд, это нормальное поведение Heartbeat. Вопрос в том, нужен ли он на всех экранах.
Дополнительно можно проверить логи сервера или статистику хостинга. Если запросы идут в основном из /wp-admin/, значит оптимизация админки даст больше эффекта, чем любые правки фронтенда.
2. Ограничьте Heartbeat в админке через код
Самый практичный вариант — добавить небольшой сниппет в functions.php дочерней темы или, лучше, в отдельный mu-plugin. Так вы не потеряете настройку при обновлении темы.
<?php
/**
* Ограничение Heartbeat API в админке.
*/
add_action( 'admin_enqueue_scripts', function( $hook ) {
// Оставляем Heartbeat только в редакторе записей и страниц.
$allowed_hooks = array(
'post.php',
'post-new.php',
);
if ( ! in_array( $hook, $allowed_hooks, true ) ) {
wp_deregister_script( 'heartbeat' );
}
}, 100 );
add_filter( 'heartbeat_settings', function( $settings ) {
// Если Heartbeat нужен, но реже — увеличиваем интервал.
$settings['interval'] = 60;
return $settings;
} );Этот вариант не отключает Heartbeat в редакторе полностью, но убирает его с большинства экранов админки. Для многих сайтов этого достаточно, чтобы снизить фоновые запросы.
3. Если нужен более жёсткий режим, отключите его на фронтенде
На публичной части сайта Heartbeat обычно не нужен. Если тема или плагины не используют его для конкретных сценариев, можно убрать скрипт с фронтенда.
<?php
add_action( 'wp_enqueue_scripts', function() {
if ( ! is_admin() ) {
wp_deregister_script( 'heartbeat' );
}
}, 100 );Но здесь есть оговорка: если у вас на фронтенде есть формы, редакторы или плагины, которые рассчитывают на Heartbeat, сначала проверьте их поведение на тестовой копии сайта.
4. Для точечного контроля используйте mu-plugin
Если вы не хотите зависеть от темы, создайте файл wp-content/mu-plugins/disable-heartbeat-control.php. Must-use плагины загружаются автоматически и не требуют активации в админке.
<?php
/**
* Plugin Name: Disable Heartbeat Control
*/
add_action( 'admin_enqueue_scripts', function( $hook ) {
$allowed_hooks = array( 'post.php', 'post-new.php' );
if ( ! in_array( $hook, $allowed_hooks, true ) ) {
wp_deregister_script( 'heartbeat' );
}
}, 100 );
add_filter( 'heartbeat_settings', function( $settings ) {
$settings['interval'] = 60;
return $settings;
} );Как проверить, что решение сработало
После внедрения не ограничивайтесь ощущением, что «стало быстрее». Проверьте конкретные признаки.
- в Network больше нет регулярных запросов
action=heartbeatна экранах, где вы его отключили; - в редакторе записей автосохранение и предупреждение о конфликте редактирования продолжают работать;
- на страницах админки вне редактора количество AJAX-запросов уменьшилось;
- в логах сервера стало меньше обращений к
admin-ajax.php; - не появились ошибки JavaScript в консоли браузера.
Если вы отключали Heartbeat на фронтенде, отдельно проверьте формы, личный кабинет, кастомные редакторы и всё, что может использовать AJAX в теме или плагинах.
Частые ошибки и как их исправить
Отключили Heartbeat полностью и потеряли автосохранение
Это самая частая ошибка. Если редакторы жалуются, что пропали уведомления о блокировке записи или автосохранение работает нестабильно, верните Heartbeat хотя бы в post.php и post-new.php.
Добавили код в родительскую тему
После обновления тема может перезаписаться. Для таких правок используйте дочернюю тему или mu-plugin. Это особенно важно, если вы отключаете Heartbeat на продакшене.
Сломали совместимость с плагином
Некоторые плагины используют Heartbeat для уведомлений, черновиков или интерфейса в админке. Если после правки пропали элементы интерфейса, временно отключите сниппет и проверьте список активных плагинов по одному.
Проверяли только главную страницу сайта
Heartbeat чаще всего бьёт по админке, а не по публичной части. Если вы смотрели только фронтенд, можно не заметить основную проблему. Проверяйте именно те экраны, где запросы идут постоянно.
Безопасность и производительность: что учесть заранее
Не стоит использовать «оптимизаторы», которые отключают всё подряд без понимания последствий. Если плагин обещает убрать лишние запросы одним кликом, проверьте, не затрагивает ли он автосохранение, REST API или другие системные механизмы. Для технической чистки и SEO-оптимизации иногда удобнее взять точечный инструмент вроде Clearfy Pro: он помогает управлять дублями, служебными элементами и частью лишней нагрузки, но всё равно требует проверки на тестовой копии сайта.
Перед изменениями сделайте резервную копию файлов и базы, а затем проверьте сайт в режиме инкогнито и под ролью редактора. Если у вас несколько администраторов, предупредите команду: отключение Heartbeat может изменить поведение открытых вкладок в панели.
Если нужен минимальный риск, начинайте с увеличения интервала Heartbeat, а не с полного отключения. Это даёт компромисс между удобством редактора и снижением фоновой активности.