El Heartbeat de WordPress es una señal que el navegador envía al servidor cada pocos segundos (normalmente entre 15 y 60, según la pantalla) a través de admin-ajax.php. Sirve para el autoguardado, para avisar de que otra persona está editando la misma entrada y para algunas notificaciones. El problema es que cada pestaña abierta del escritorio o del editor genera esas peticiones continuamente, y en un hosting ajustado, o con varios editores trabajando a la vez, se traduce en carga de CPU innecesaria. Este snippet las espacia en el escritorio y las desactiva en la parte pública de la web.
Puedes utilizar este sencillo snippet en php desde el archivo functions.php.
Importante: no modifiques directamente el archivo functions.php del tema que tengas instalado. Genera un tema hijo con alguno de los plugins del repositorio de WordPress y actívalo. Cuando lo tengas, entra en el functions.php del tema hijo. Una alternativa es instalar algún plugin que permite incrustar código sin problema de pérdida en la actualización del tema.
/**
* Limitar el Heartbeat de WordPress para reducir la carga del servidor
*/
// 1. Espaciar las peticiones del Heartbeat en el escritorio y en el editor (en segundos, valores de 15 a 120)
add_filter( 'heartbeat_settings', 'lc_heartbeat_intervalo' );
function lc_heartbeat_intervalo( $settings ) {
$settings['interval'] = 60;
return $settings;
}
// 2. Desactivar el Heartbeat en la parte pública de la web
add_action( 'wp_enqueue_scripts', 'lc_heartbeat_desactivar_front', 100 );
function lc_heartbeat_desactivar_front() {
wp_deregister_script( 'heartbeat' );
}
Menos peticiones a admin-ajax.php: Al subir el intervalo a 60 segundos y quitar el Heartbeat de la web pública, se reducen las llamadas repetidas que hace cada usuario con sesión iniciada. Puedes cambiar el valor de 60 por cualquier número entre 15 y 120.
Qué se ve afectado: El autoguardado, el aviso de «otra persona está editando esta entrada» y las notificaciones en tiempo real se actualizarán con más retraso. Si en tu web trabajan varios editores a la vez sobre los mismos contenidos, valora un intervalo más corto, por ejemplo 30 segundos.
Compatibilidad: El segundo bloque desactiva el Heartbeat solo en la parte pública. Si algún plugin que usas en esa parte (membresías, chats, contadores en directo) depende de él, elimina ese bloque y deja solo el primero.
Cómo comprobarlo: Abre las herramientas de desarrollo del navegador, pestaña «Red», filtra por admin-ajax.php y observa cada cuánto aparece la petición heartbeat antes y después de aplicar el snippet.
Si te interesan más ajustes de rendimiento sin plugins, mira también cómo desactivar los emojis nativos de WordPress.