Desactivar los emojis nativos de WordPress para mejorar el rendimiento (WPO)

Dificultad: Fácil

WordPress carga de forma predeterminada un script (wp-emoji-release.min.js) y estilos CSS adicionales en el encabezado de todas las páginas para dar soporte a emojis antiguos. Este snippet elimina por completo esas peticiones HTTP innecesarias y limpia el código fuente sin afectar a los emojis nativos del sistema operativo o navegador.

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.


/**
 * Desactivar los emojis nativos y scripts asociados en WordPress
 */
add_action( 'init', 'lc_desactivar_emojis_wordpress' );
function lc_desactivar_emojis_wordpress() {
    // Eliminar acciones asociadas a la impresión de scripts y estilos de emojis
    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' );
    
    // Eliminar filtros en feeds, emails y URLs
    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' );
    
    // Desactivar la conversión en el editor TinyMCE / Gutenberg si aplica
    add_filter( 'tiny_mce_plugins', 'lc_desactivar_emojis_tinymce' );
    
    // Eliminar la precarga DNS del dominio de s.w.org para emojis
    add_filter( 'wp_resource_hints', 'lc_desactivar_emojis_dns_prefetch', 10, 2 );
}

/**
 * Quitar el plugin de emojis del editor TinyMCE
 */
function lc_desactivar_emojis_tinymce( $plugins ) {
    if ( is_array( $plugins ) ) {
        return array_diff( $plugins, array( 'wpemoji' ) );
    }
    return array();
}

/**
 * Eliminar la sugerencia de conexión DNS previa a s.w.org
 */
function lc_desactivar_emojis_dns_prefetch( $urls, $relation_type ) {
    if ( 'dns-prefetch' === $relation_type ) {
        $emoji_svg_url = apply_filters( 'emoji_svg_url', 'https://s.w.org/images/core/emoji/' );
        foreach ( $urls as $key => $url ) {
            if ( false !== strpos( $url, $emoji_svg_url ) ) {
                unset( $urls[$key] );
            }
        }
    }
    return $urls;
}

Ahorro de peticiones HTTP: Cancela la descarga en bucle de wp-emoji-release.min.js en el frontend y en el panel de administración.

Eliminación de DNS Prefetch: Remueve la precarga de la CDN externa s.w.org, arañando milisegundos en métricas de rendimiento como TTFB y First Contentful Paint (FCP).

Emojis 100% funcionales: Los usuarios seguirán viendo todos los emojis (😀, 🚀, 🔥) porque los navegadores modernos y sistemas operativos actuales los renderizan de forma nativa sin necesidad de imágenes ni scripts de soporte.