Skip to content

Todo para WordPress, el desarrollo web — y mucho más

Cómo desactivar los estilos CSS de plugins de WordPress mediante functions.php

Cómo desactivar los estilos CSS de plugins de WordPress mediante functions.php

Conoce esa sensación: su sitio en WordPress está listo, con el diseño aplicado y todos los plugins en su lugar. Ejecuta PageSpeed Insights y ahí está, en naranja. O en rojo. El culpable casi siempre es el mismo: el CSS. Decenas de archivos de estilo de plugins y del tema se alinean en una cola y bloquean la renderización. La página es lenta no porque sea pesada, sino porque el navegador está esperando.

El problema es más profundo de lo que parece. Un plugin carga su style.css en cada página del sitio, incluso donde su funcionalidad no se utiliza. Un formulario de contacto solo aparece en la página de contactos, pero sus estilos se cargan en todas partes. Un slider está en la página de inicio, pero sus cuatro archivos CSS penden de cada URL sin excepción. Eso supone decenas de kilobytes y solicitudes innecesarias en cada vista de página.

Usted puede desactivar estilos innecesarios sin instalar plugins adicionales, a través de functions.php. Esto no es un truco; es un mecanismo integrado de WordPress que funciona desde la versión 2.6. A continuación, la guía completa: desde cómo encontrar el identificador hasta cómo cargar de forma asíncrona un archivo combinado.

💡 Resumen rápido:

  • Cómo encontrar el identificador (handle) de cualquier archivo CSS de plugin a través del atributo id en el código fuente de la página
  • Cómo desactivar estilos usando la combinación wp_dequeue_style + wp_deregister_style con la prioridad correcta
  • Cómo combinar los estilos desactivados en un solo archivo y cargarlo de forma asíncrona mediante media print, sin perder el estilo y sin bloquear la renderización

Cómo encontrar el identificador del archivo CSS de un plugin

WordPress asigna un identificador único, un handle, a cada archivo de estilo encolado. Este handle es lo que requieren las funciones wp_dequeue_style (documentación) y wp_deregister_style (codex). Sin el handle correcto, no se desactiva nada.

El método más fiable es examinar el código fuente HTML de la página. Adivinar basándose en el nombre del plugin no funciona; el desarrollador del plugin nombra el handle como quiere, y la lógica puede no ser obvia.

Abra el código fuente de la página (Ctrl+U o view-source: antes de la URL) y busque la etiqueta <link> que carga el CSS del plugin que necesita. Por ejemplo, para Elementor tiene este aspecto:

1<link href="/wp-content/plugins/elementor/assets/lib/animations/animations.min.css"
2 id="elementor-animations-css" media="all" rel="stylesheet" type="text/css">

Fíjese en el atributo id. WordPress lo construye usando el patrón: **handle del plugin + el sufijo **-css. En el ejemplo anterior, id="elementor-animations-css", lo que significa que el handle es elementor-animations. Quite -css del final del valor de id y obtendrá el handle exacto para desactivar. Esto funciona para cualquier plugin o tema.

Hay casos en los que el desarrollador no incluye un id en el <link>. En ese caso, busque elementos vecinos con un id o revise las etiquetas <script> del mismo plugin: los scripts usan el sufijo -js, y el handle a menudo coincide con el del estilo. Si aún no lo encuentra, abra el código fuente del plugin en /wp-content/plugins/... y busque la llamada a wp_enqueue_style(): el primer argumento es el handle.

Desactivar estilos: wp_dequeue_style y wp_deregister_style

WordPress proporciona dos funciones para gestionar estilos. La diferencia es fundamental:

Función

Qué hace

Cuándo usarla

wp_dequeue_style

Elimina el estilo de la cola de salida en <head>

El estilo está registrado y encolado, el caso estándar

wp_deregister_style

Elimina por completo el registro del estilo del sistema

Necesita no solo ocultarlo, sino reemplazarlo con su propia versión o excluirlo permanentemente

En la práctica, ambas funciones se usan juntas: wp_dequeue_style lo elimina de la cola, y luego wp_deregister_style en el codex asegura que ningún otro código vuelva a encolar ese handle a través de la cadena de dependencias.

Código básico para functions.php

El código siguiente desactiva los estilos de dos plugins: full-screen-search y prettyPhoto. La prioridad alta 9999 garantiza que la desactivación se ejecute DESPUÉS de que el plugin haya registrado y encolado sus estilos. Sin la prioridad elevada, la función podría ejecutarse antes que el plugin, sin dejar nada que desactivar.

1/**
2 * Disable CSS files of specific plugins.
3 * Priority 9999 — runs last in the wp_enqueue_scripts chain.
4 */
5function sdstudio_dequeue_plugin_styles() {
6 // Dequeue
7 wp_dequeue_style( 'full-screen-search' );
8 wp_dequeue_style( 'prettyPhoto' );
9
10 // Deregister — so no one can re-enqueue
11 wp_deregister_style( 'full-screen-search' );
12 wp_deregister_style( 'prettyPhoto' );
13}
14add_action( 'wp_enqueue_scripts', 'sdstudio_dequeue_plugin_styles', 9999 );

Lo que importa aquí: el hook wp_enqueue_scripts es el lugar correcto para esta operación. No wp_head, no init, no wp_loaded. Es en wp_enqueue_scripts donde WordPress ensambla la cola de estilos, y es ahí donde usted debe desactivarlos, justo después de que lo hagan los plugins.

Por qué prioridad 9999, y no 11 o 99

Los plugins registran estilos con la prioridad predeterminada de 10. Pero algunos establecen 20, 50 o incluso 100 cuando tienen cadenas de dependencias complejas. Una prioridad de 9999 cubre prácticamente cualquier escenario real. La única desventaja: si dos de sus propios fragmentos comparten la misma prioridad de 9999, su orden de ejecución queda indefinido. En la práctica esto es raro, mientras que usar 11 falla con frecuencia frente a plugins "reacios".

Adicionalmente, usted puede registrar la desactivación en el hook wp_head con la misma prioridad como red de seguridad para estilos que un plugin encola saltándose wp_enqueue_scripts e imprimiendo directamente en el <head>:

1add_action( 'wp_head', 'sdstudio_dequeue_plugin_styles', 9999 );

Pero esto es un plan B. Normalmente, un solo wp_enqueue_scripts es suficiente.

Cómo desactivar TODOS los estilos de un plugin específico

Muchos plugins no tienen un solo archivo CSS, sino varios. Contact Form 7, WooCommerce, Elementor, cada uno arrastra de 3 a 5 archivos de estilos. Desactivarlos uno por uno es tedioso. Analice el código fuente de la página y recolecte todos los handles con el mismo prefijo: suelen estar agrupados.

Ejemplo para Elementor, un conjunto típico de handles: elementor-frontend, elementor-animations, elementor-icons y elementor-pro. Los cuatro en una sola llamada:

1function sdstudio_dequeue_elementor_styles() {
2 $handles = [
3 'elementor-frontend',
4 'elementor-animations',
5 'elementor-icons',
6 'elementor-pro',
7 ];
8 foreach ( $handles as $handle ) {
9 wp_dequeue_style( $handle );
10 wp_deregister_style( $handle );
11 }
12}
13add_action( 'wp_enqueue_scripts', 'sdstudio_dequeue_elementor_styles', 9999 );

Qué hacer con los estilos desactivados

Desactivar es solo la mitad del trabajo. Si usted simplemente elimina el CSS de un plugin, todo en la página se rompe: los formularios se desalinean, los sliders se desarman, los iconos desaparecen. Los estilos son necesarios, solo que no al costo de bloquear el renderizado.

El enfoque correcto: combinar los estilos desactivados en UN solo archivo compacto y cargarlo sin bloquear. El algoritmo:

  • Estilos del plugin desactivados mediante wp_dequeue_style + wp_deregister_style.
  • Copié el contenido de CADA archivo CSS desactivado. Tómelos de la carpeta del plugin, no del inspector del navegador, que muestra una versión minificada incómoda para trabajar.
  • Los combiné en un solo archivo, por ejemplo /wp-content/themes/your-theme/css/dequeued-plugins.css.
  • Lo cargué con el atributo media="print" y onload="this.media='all'". El navegador descarga el archivo de forma asíncrona sin bloquear el renderizado y aplica los estilos tras la carga.

Código de carga del archivo combinado

1/**
2 * Load the combined CSS file of disabled styles asynchronously.
3 */
4function sdstudio_enqueue_dequeued_styles() {
5 wp_enqueue_style(
6 'sdstudio-dequeued',
7 get_stylesheet_directory_uri() . '/css/dequeued-plugins.css',
8 [],
9 filemtime( get_stylesheet_directory() . '/css/dequeued-plugins.css' )
10 );
11}
12add_action( 'wp_enqueue_scripts', 'sdstudio_enqueue_dequeued_styles', 1 );

La prioridad de 1 aquí es intencional: el archivo combinado debe encolarse ANTES de que se ejecuten las funciones de desactivación con prioridad 9999. De lo contrario, WordPress puede no reconocer la dependencia y eliminar los estilos de la cola por completo.

Carga asíncrona sin un plugin

Para evitar que el navegador espere el archivo CSS antes de renderizar la página, añada los atributos media="print" y onload mediante el filtro style_loader_tag:

1/**
2 * Change media="print" to onload-switch for asynchronous CSS loading.
3 */
4function sdstudio_async_css( $html, $handle ) {
5 if ( 'sdstudio-dequeued' !== $handle ) {
6 return $html;
7 }
8 return str_replace(
9 "media='all'",
10 "media='print' onload=\"this.media='all'; this.onload=null;\"",
11 $html
12 );
13}
14add_filter( 'style_loader_tag', 'sdstudio_async_css', 10, 2 );

El mecanismo es sencillo: el navegador ve media="print" y no bloquea el renderizado, ya que el tipo de medio print no afecta a la pantalla. Después de que el archivo se carga, onload se dispara, cambia media a all, y los estilos se aplican al instante. El usuario ve una página completamente estilizada sin demora en la carga inicial.

Cuándo no debe desactivar estilos mediante functions.php

El método wp_dequeue_style es potente, pero no universal. Aquí tiene tres casos en los que resulta inútil o perjudicial:

  • Los estilos están incrustados en línea mediante wp_add_inline_style. Estos estilos residen dentro de una etiqueta <style> y no tienen un identificador independiente. Necesitará desactivarlos mediante wp_deregister_script del script padre o encontrar el hook que el plugin utiliza para añadir estilos en línea.

  • El plugin inserta CSS directamente en <head> mediante echo. Esta es una solución alternativa que usan algunos plugins antiguos. Aquí solo servirá encontrar el hook específico o, como último recurso, el almacenamiento en búfer de salida.

  • Está trabajando con un tema de terceros que gestiona las dependencias por su cuenta. Algunos temas, especialmente los premium, utilizan su propio cargador de recursos que elude WP_Styles. Antes de escribir código, revise el header.php del tema: si ve un echo '<link...' directo, el sistema de desregistro no funcionará.

En estos casos, es mejor usar plugins especializados como Asset CleanUp o Perfmatters, que funcionan a nivel de URL y desactivan recursos página por página sin necesidad de indagar en hooks.

Vea la videoguía sobre cómo desactivar estilos: todo el proceso, desde encontrar el identificador hasta verificar el resultado, en 8 minutos.

⁉️🤔 Preguntas frecuentes

¿Necesito desactivar estilos CSS en el panel de administración (*/wp-admin/*)?

No. Los estilos cargados mediante el hook admin_enqueue_scripts no afectan al frontend y no necesitan desactivarse. Es más, intentar desregistrar estilos de administración a través de wp_enqueue_scripts no hará nada, ya que se registran por separado. Si el panel de administración va lento, el problema suele estar en otra parte: scripts de analíticas pesados en el escritorio, Google Fonts externas o la API Heartbeat.

¿Es seguro* eliminar -css del atributo id para obtener el identificador? ¿Funciona siempre esta regla?*

Sí, el sufijo -css lo añade el núcleo de WordPress en el método WP_Dependencies::enqueue() desde la versión 2.6; es un mecanismo invariable. Pero hay un matiz: si el desarrollador del plugin asignó manualmente un id personalizado a la etiqueta <link>, el sufijo podría no estar presente. En ese caso, el identificador es el segundo argumento de la llamada a wp_enqueue_style() en el código fuente del plugin. La regla de -css cubre la gran mayoría de los casos.

¿Puedo desactivar estilos solo en páginas específicas?

Sí, y este es el enfoque adecuado para producción. Envuelva la llamada a wp_dequeue_style en una etiqueta condicional de WordPress: is_front_page() para la portada, is_single() para entradas, is_page() para páginas, is_archive() para archivos. Para excluir por ID de entrada, use ! is_single(123). La desactivación condicional en URLs específicas reduce la carga en todo el sitio, no solo donde el plugin no es necesario.

¿Qué ocurre si llamo a wp_dequeue_style para un identificador que no está registrado?

Nada. La función finaliza silenciosamente sin errores, avisos PHP ni advertencias. Esto es seguro. Pero no confíe en ello como estrategia: recolecte identificadores solo de páginas reales, de lo contrario su código acumula líneas «muertas» que no hacen nada y solo saturan functions.php.

¿Cómo verifico que un estilo se desactivó realmente y no solo dejó de aplicarse por la caché?

Abra el código fuente de la página (Ctrl+U), no el panel de desarrollador. Busque un <link> con el identificador del plugin o su id. Si la etiqueta no está, el estilo está desactivado. La caché del navegador no afecta al código fuente, a diferencia de la pestaña Red en DevTools. Adicionalmente, puede limpiar la caché de WordPress: cualquier plugin de caché, luego Purge All.

Conclusiones clave sobre la desactivación de CSS en WordPress

Tres conclusiones principales de toda esta guía:

  • El identificador es la clave de todo. Sin el identificador correcto, ninguna función funcionará. Encuentre siempre el identificador a través del atributo id en el código fuente de la página. La regla de eliminar -css funciona casi siempre; para las excepciones, revise el código fuente del plugin.

  • Dequeue + Deregister es la combinación estándar. La primera función elimina el estilo de la cola, la segunda asegura que no reaparezca a través de la cadena de dependencias. La prioridad 9999 cubre cualquier plugin «rebelde», y el hook wp_enqueue_scripts es el único lugar correcto para esta operación.

  • Los estilos desactivados no deben desaparecer. Combínelos en un único archivo y cárguelo de forma asíncrona mediante media="print" + onload. El usuario obtiene una página completamente estilizada y el navegador no espera al CSS antes de renderizar.

Pruébelo hoy con uno o dos plugins. Un par de minutos en functions.php y el resultado es inmediatamente visible en PageSpeed Insights. Empiece por el plugin «más pesado», el que tenga más archivos CSS: desactive, combine, mida la velocidad. Lo más probable es que solo con eso baste para pasar de la zona naranja a la verde.