# Como corrigir o erro ao desativar emojis no Perfmatters no WordPress

O erro ao usar o Perfmatters disable emojis ocorre quando outro plugin de cache serve um HTML antigo, um plugin de terceiros reenfileira o emoji do WordPress ou o tema usa caracteres emoji que dependiam do script removido, fazendo o wp-emoji-release.min.js voltar a aparecer ou os emojis renderizarem errado.

## 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.

**Antes de começar:** Antes de editar o functions.php ou desativar plugins em producao, faca um backup do site (arquivos e banco de dados) ou teste primeiro em um ambiente de staging, para reverter caso a edição quebre alguma função ou cause erro fatal no tema.

## 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.

Erros relacionados

- [Como corrigir o erro de DNS Prefetch no Perfmatters](https://full.services/wp-fixer/corrigir-dns-prefetch-perfmatters/)
- [Como corrigir funcionalidades quebradas pelo Perfmatters](https://full.services/wp-fixer/corrigir-funcionalidades-quebradas-perfmatters/)
- [Como corrigir a remoção de query strings no Perfmatters](https://full.services/wp-fixer/corrigir-query-strings-perfmatters/)

## 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

1. 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'
```

2. 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
```

3. 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
```

4. 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
```

5. 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
```


## Código

```php
<?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;
}
```

## Perguntas frequentes

### Por que o wp-emoji-release.min.js ainda carrega com o Perfmatters disable emojis ativo

Na maioria dos casos e cache servindo uma versão antiga do HTML, gerada antes de você ativar a opção. Limpe o cache do plugin, da CDN e do navegador e recarregue com Ctrl+F5. Se o script persistir, outro plugin esta reenfileirando o emoji e precisa ser identificado.

### O que a opção Disable Emojis do Perfmatters remove exatamente

Ela desenfileira o script wp-emoji-release.min.js que o WordPress carrega por padrão, remove a entrada de DNS prefetch para s.w.org do cabeçalho e tira o plugin de emoji do editor classico TinyMCE. O objetivo e eliminar uma requisicao de JavaScript e CSS desnecessaria na maioria dos sites.

### Desativar emojis no Perfmatters prejudica meu SEO ou os emojis do conteúdo

Não prejudica o SEO; ao contrario, remove uma requisicao a menos e tende a melhorar a velocidade. Os emojis digitados no conteúdo continuam renderizando nativamente em navegadores e sistemas modernos, sem precisar do script do WordPress.

### Meus emojis viraram caixas vazias depois de ativar o Disable Emojis

Isso acontece em navegadores ou sistemas operacionais antigos que dependiam do polyfill wp-emoji para exibir os simbolos. Sistemas modernos renderizam emoji nativamente. Se boa parte do seu público usa dispositivos antigos, considere manter o suporte de emoji ativo.

### O Perfmatters e o WP Rocket podem entrar em conflito ao desativar emoji

Sim, se os dois tiverem a opção de remover emoji ativada ao mesmo tempo, a ordem de execução pode fazer um reverter o efeito do outro de forma intermitente. Mantenha a remoção de emoji ativa em apenas um dos plugins.

### Como confirmo que os emojis foram realmente desativados

Abra o código fonte da página com Ctrl+U e busque por wp-emoji-release.min.js e por s.w.org. Se nenhum dos dois aparecer no HTML depois de limpar o cache, o suporte de emoji do WordPress foi removido com sucesso.

### Preciso de código para desativar emojis ou a opção do plugin basta

A opção do Perfmatters basta na maioria dos sites. So recorra ao snippet no functions.php quando um plugin de terceiros insistir em reenfileirar o emoji depois do Perfmatters e você não puder desativa-lo.

### A DNS prefetch para s.w.org continua no cabeçalho mesmo com a opção ativa

Geralmente e cache da página ou da CDN mantendo o cabeçalho antigo. Purgue todos os caches e recarregue sem cache. Se a linha de dns-prefetch para s.w.org persistir, verifique se outro plugin esta adicionando esse recurso de preconexao.

**Fonte:** [Perfmatters Documentation — Disable Emojis](https://perfmatters.io/docs/disable-emojis/)
