Como corrigir o erro de Heartbeat API entre Perfmatters e WP Rocket no WordPress
O que é erro de Heartbeat com Perfmatters e WP Rocket?
O Heartbeat com Perfmatters e WP Rocket envolve a Heartbeat API do WordPress, o mecanismo que faz o navegador chamar /wp-admin/admin-ajax.php em intervalos regulares (por padrão a cada 15 segundos) para tarefas como salvamento automático, bloqueio de post sendo editado e notificações em tempo real. Esse tráfego constante de admin-ajax consome CPU e gera muitas chamadas PHP, e por isso tanto o Perfmatters quanto o WP Rocket oferecem uma opção para reduzir ou desativar a Heartbeat.
O problema surge quando os dois plugins ficam responsaveis pela mesma API ao mesmo tempo. O Perfmatters tem a opção Disable Heartbeat (Leave as default, Disable everywhere ou Only Allow When Editing Posts/Pages) e também o ajuste de Heartbeat Frequency (15, 30, 45 ou 60 segundos). O WP Rocket tem a aba Heartbeat com Reduzir atividade ou Desativar para painel, editor de posts e frontend. Quando ambos atuam, o ajuste mais agressivo vence e o pulso para de chegar onde o editor precisa, quebrando funções que dependem dele.
Como identificar
- O salvamento automático para de funcionar: o aviso ‘Salvando rascunho…’ nunca aparece e você perde alterações ao recarregar a página do editor.
- Surge o aviso ‘Atenção: você esta editando este conteúdo, mas Fulano de Tal também comecou a editar’ de forma errada, ou o bloqueio de post não trava mais quando dois usuários abrem o mesmo conteúdo.
- O painel deixa de mostrar notificações em tempo real (novos comentarios, status de publicação agendada) que dependem do pulso da Heartbeat.
- O editor do Elementor ou outro page builder exibe ‘Não foi possível salvar’ ou trava na previa após a Heartbeat ser desativada em todo lugar.
- No console do navegador as chamadas POST para admin-ajax.php com action=heartbeat desaparecem por completo, ou aparecem com intervalo muito maior que o esperado.
Como prevenir
- Defina uma regra clara: apenas um plugin (Perfmatters ou WP Rocket) controla a Heartbeat API, e documente qual e ele para a equipe.
- No Perfmatters, prefira ‘Only Allow When Editing Posts/Pages’ a ‘Disable everywhere’ quando houver page builder ativo, como recomenda a doc oficial.
- Ao reduzir o intervalo da Heartbeat, ajuste a frequencia em um plugin so (por exemplo 60 segundos no Perfmatters) e deixe o outro sem mexer no mesmo local.
- Depois de qualquer mudanca de Heartbeat, limpe o cache do WP Rocket e teste o autosave em uma tela de edição antes de publicar a alteração.
Causa
- O Perfmatters esta com Disable Heartbeat em 'Disable everywhere' e o WP Rocket também esta com a Heartbeat em 'Desativar' no editor de posts: o pulso some no editor e o autosave e o bloqueio de post param de funcionar.
- O Perfmatters esta em 'Disable everywhere' enquanto um page builder como o Elementor esta ativo; a doc oficial do Perfmatters alerta que desativar a Heartbeat em todo lugar pode causar problemas na funcionalidade de page builders, e por isso recomenda 'Only Allow When Editing Posts/Pages'.
- Os dois plugins reduzem o intervalo ao mesmo tempo: o Perfmatters sobe a Heartbeat Frequency para 60 segundos e o WP Rocket aplica 'Reduzir atividade' no frontend, somando atrasos que fazem notificações em tempo real demorarem demais para chegar.
- O WP Rocket esta com 'Reduzir atividade' no painel e o Perfmatters em 'Disable everywhere'; como o ajuste mais restritivo prevalece, a Heartbeat fica desligada no painel e funções de tempo real do dashboard deixam de atualizar.
- Uma regra de cache de página do WP Rocket serve uma versão antiga do editor ou do admin para um usuário logado, mantendo um estado de Heartbeat divergente do que esta salvo nas configurações atuais dos plugins.
Como resolver
- Escolha um único plugin para controlar a Heartbeat: Decida se quem controla a Heartbeat API será o Perfmatters OU o WP Rocket, nunca os dois. Manter o controle em um so plugin evita que o ajuste mais restritivo de um anule o do outro e derrube o pulso onde o editor precisa.
Painel WP -> Configurações -> Perfmatters -> aba General -> seção Disable Heartbeat Painel WP -> Configurações -> WP Rocket -> aba Heartbeat - No Perfmatters, use 'Only Allow When Editing Posts/Pages': Se optar pelo Perfmatters, troque a opção Disable Heartbeat de 'Disable everywhere' para 'Only Allow When Editing Posts/Pages'. A doc oficial recomenda essa opção porque mantem o pulso vivo dentro do editor (preservando autosave e bloqueio) e o desliga so onde não e necessário, além de evitar quebra de page builders.
Painel WP -> Configurações -> Perfmatters -> General -> Disable Heartbeat Selecione 'Only Allow When Editing Posts/Pages' Clique em Save Changes - No WP Rocket, neutralize o controle de Heartbeat do editor: Se o Perfmatters já cuida da Heartbeat, deixe o WP Rocket sem desligar o pulso no editor de posts. Mantenha o editor de posts em 'Não limitar' (ou no máximo 'Reduzir atividade') para não somar restricao com o Perfmatters e travar o autosave.
Painel WP -> Configurações -> WP Rocket -> aba Heartbeat No campo Editor de posts, escolha 'Não limitar' ou 'Reduzir atividade' Salve as alterações - Limpe o cache do WP Rocket e recarregue o editor: Depois de ajustar os dois plugins, limpe todo o cache do WP Rocket para que o painel e o editor não continuem servindo um estado antigo de Heartbeat. Recarregue uma tela de edição e confirme que o autosave volta a aparecer.
Painel WP -> Configurações -> WP Rocket -> Limpar cache Abra um post em edição e aguarde o aviso 'Salvando rascunho...' - Confirme o pulso pelo console do navegador: Valide que a Heartbeat voltou a pulsar no editor inspecionando as chamadas de rede. Você deve ver requisicoes POST periodicas para admin-ajax.php com action=heartbeat enquanto a tela de edição esta aberta.
Abra o editor de um post e pressione F12 -> aba Network (Rede) Filtre por admin-ajax.php e confirme POSTs periodicos com action=heartbeat
<?php
// Centraliza o controle da Heartbeat em UM unico ponto (tema/plugin) e desativa
// o controle dos plugins para evitar o conflito Perfmatters x WP Rocket.
add_filter( 'heartbeat_settings', 'full_heartbeat_interval' );
function full_heartbeat_interval( $settings ) {
// Mantem o pulso vivo no editor, mas a cada 60s (em vez de 15s) para aliviar a CPU.
$settings['interval'] = 60; // segundos (faixa valida do core: 15 a 120)
return $settings;
}
// Desliga a Heartbeat apenas no frontend, onde o editor nao precisa dela.
add_action( 'init', 'full_heartbeat_frontend_off', 1 );
function full_heartbeat_frontend_off() {
if ( ! is_admin() ) {
wp_deregister_script( 'heartbeat' );
}
}














