Como corrigir o erro ao desativar emojis no Perfmatters no WordPress
O que é erro ao desativar emojis no Perfmatters?
A opção Perfmatters disable emojis fica na aba General das configurações do plugin e remove o suporte de emoji que o WordPress carrega por padrão em todas as páginas. Quando ativada, ela desenfileira o script wp-emoji-release.min.js (gerado pelos ganchos print_emoji_detection_script e print_emoji_styles), remove a entrada de DNS prefetch para s.w.org no cabeçalho e tira o plugin wpemoji do TinyMCE no editor classico. O objetivo e eliminar uma requisicao de JavaScript e CSS que a maioria dos sites não precisa, já que navegadores e sistemas modernos renderizam emoji nativamente.
O problema aparece de duas formas. Na primeira, a opção esta marcada mas o wp-emoji-release.min.js continua aparecendo no código fonte da página: quase sempre e cache servindo uma versão antiga do HTML, ou um plugin de terceiros que reenfileira o script depois do Perfmatters. Na segunda, os emojis que antes funcionavam passam a aparecer como caixas vazias ou caracteres quebrados em navegadores ou dispositivos antigos que dependiam do polyfill do WordPress para exibir os simbolos.
Como identificar
- O wp-emoji-release.min.js ainda aparece no código fonte (Ctrl+U) da página mesmo com a opção Disable Emojis marcada no Perfmatters.
- A linha de DNS prefetch para ‘s.w.org’ continua no cabeçalho HTML do site depois de salvar a configuração.
- Emojis que antes apareciam normais passam a ser exibidos como caixas vazias ou pontos de interrogacao em navegadores e sistemas antigos.
- O auditor do PageSpeed Insights ou GTmetrix ainda lista a requisicao do script de emoji como recurso a remover.
- Após marcar Disable Emojis, um plugin de terceiros volta a injetar o script de emoji apenas em páginas especificas, como páginas de produto.
Como prevenir
- Deixe apenas um plugin responsável por desativar emojis: se o Perfmatters cuida disso, desligue a mesma opção no WP Rocket ou em outros plugins de performance para evitar que um reverta o outro.
- Sempre limpe o cache do plugin e da CDN depois de mudar qualquer configuração do Perfmatters, para que o novo HTML seja gerado e servido aos visitantes.
- Evite colar caracteres emoji diretamente no conteúdo de posts e páginas se parte do público usa navegadores ou sistemas antigos, pois sem o polyfill do WordPress eles podem não renderizar.
- Documente quais otimizacoes do Perfmatters estão ativas para que ajustes futuros de outro plugin não entrem em conflito com a remoção de emoji sem ninguem perceber.
Causa
- Um plugin de cache (WP Rocket, LiteSpeed Cache, W3 Total Cache) esta servindo o HTML gerado antes de ativar o Disable Emojis, entao a página em cache ainda contem o wp-emoji-release.min.js até a limpeza do cache.
- Um plugin de terceiros reenfileira o suporte de emoji com prioridade mais alta depois do Perfmatters: ele readiciona os ganchos print_emoji_detection_script e print_emoji_styles que o Perfmatters havia removido.
- O conteúdo do post usa caracteres emoji digitados diretamente e o site e acessado em um navegador ou sistema operacional antigo que dependia do polyfill wp-emoji para renderizar esses simbolos, agora removido.
- Outro plugin de performance (como o WP Rocket) também tem a própria opção de remover emoji ativada, e a ordem de execução dos dois faz um reverter o efeito do outro de forma intermitente.
- Uma camada de cache de página no servidor ou na CDN (Cloudflare, Nginx FastCGI) mantem o HTML antigo na borda, mostrando o script de emoji mesmo após a limpeza do cache do plugin no WordPress.
Como resolver
- Confirme que a opção Disable Emojis esta marcada: Abra as configurações do Perfmatters e confirme que a opção Disable Emojis esta ativada na aba General. Salve novamente para garantir que a configuração foi gravada.
Painel WP -> Configurações -> Perfmatters -> aba General Marque a opção 'Disable Emojis' Clique em 'Save Changes' - Limpe todos os caches: Como a página antiga em cache ainda contem o script de emoji, limpe o cache do plugin de cache, da CDN e do navegador. Em seguida recarregue a página com Ctrl+F5 e confira o código fonte novamente.
Limpe o cache do seu plugin (ex.: WP Rocket -> Limpar cache) Purgue o cache da CDN (ex.: Cloudflare -> Caching -> Purge Everything) Recarregue a página com Ctrl+F5 e abra o código fonte com Ctrl+U - Verifique se o script de emoji ainda esta no HTML: No código fonte da página, procure por wp-emoji-release.min.js. Se ele ainda aparecer mesmo depois de limpar o cache, outro plugin esta reenfileirando o emoji e você precisa identifica-lo no próximo passo.
No código fonte (Ctrl+U), use Ctrl+F e busque por 'wp-emoji-release.min.js' Busque também por 'dns-prefetch' e 's.w.org' no cabeçalho - Isole o plugin que reenfileira o emoji: Desative os outros plugins de performance e de funcionalidade um a um, recarregando a página sem cache a cada teste, até o script de emoji sumir. O último plugin desativado antes do script sumir e o responsável pelo reenfileiramento.
Painel WP -> Plugins -> desative os demais plugins um a um Após cada desativacao, limpe o cache e recarregue com Ctrl+F5 Quando o script sumir, reative os plugins e mantenha apenas o Perfmatters cuidando do emoji - Force a remoção do emoji pelo functions.php se o conflito persistir: Se um plugin insistir em reenfileirar o emoji, adicione o snippet de remoção no functions.php do tema filho, que roda na inicializacao e remove os ganchos de emoji do WordPress de forma definitiva.
Acesse o tema filho via Aparencia -> Editor de Arquivos do Tema ou por FTP Adicione o snippet do bloco de código ao final do functions.php Salve, limpe o cache e confirme que o script de emoji sumiu do HTML
<?php
// Remove o suporte de emoji do WordPress de forma definitiva.
// Use no functions.php do tema filho quando um plugin reenfileira o emoji.
add_action( 'init', 'full_remover_emojis_wp' );
function full_remover_emojis_wp() {
remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
remove_action( 'wp_print_styles', 'print_emoji_styles' );
remove_action( 'admin_print_styles', 'print_emoji_styles' );
remove_filter( 'the_content_feed', 'wp_staticize_emoji' );
remove_filter( 'comment_text_rss', 'wp_staticize_emoji' );
remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email' );
// Remove o plugin de emoji do editor TinyMCE.
add_filter( 'tiny_mce_plugins', 'full_remover_tinymce_emoji' );
// Remove a DNS prefetch para s.w.org do cabecalho.
add_filter( 'wp_resource_hints', 'full_remover_emoji_dns_prefetch', 10, 2 );
}
function full_remover_tinymce_emoji( $plugins ) {
if ( is_array( $plugins ) ) {
return array_diff( $plugins, array( 'wpemoji' ) );
}
return array();
}
function full_remover_emoji_dns_prefetch( $urls, $relation_type ) {
if ( 'dns-prefetch' === $relation_type ) {
$emoji_svg = apply_filters( 'emoji_svg_url', 'https://s.w.org/images/core/emoji/' );
$urls = array_filter( $urls, function( $url ) use ( $emoji_svg ) {
return strpos( (string) $url, $emoji_svg ) === false;
} );
}
return $urls;
}














