Limitar el Heartbeat de WordPress para reducir la carga del servidor

Dificultad: Fácil

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.