
Hur man inaktiverar CSS-stilar från WordPress-tillägg via functions.php
Du känner igen känslan: din WordPress-sajt är klar, stylad, alla tillägg är på plats. Du kör PageSpeed Insights, och där är det, orange. Eller rött. Boven är nästan alltid densamma: CSS. Dussintals stilfiler från tillägg och temat ställer sig i kö och blockerar renderingen. Sidan är långsam inte för att den är tung, utan för att webbläsaren måste vänta.
Problemet är djupare än det verkar. Ett tillägg laddar sin style.css på varje sida av sajten, även där dess funktionalitet inte används. Ett kontaktformulär visas bara på kontaktsidan, men dess stilar laddas överallt. En slider ligger på startsidan, men dess fyra CSS-filer hänger med på varje URL utan undantag. Det blir dussintals onödiga kilobyte och anrop vid varje sidvisning.
Du kan inaktivera onödiga stilar utan att installera ytterligare tillägg, via functions.php. Detta är inget hack, det är en inbyggd WordPress-mekanism som har fungerat sedan version 2.6. Nedan följer den kompletta guiden: från att hitta identifieraren till att asynkront ladda en sammanslagen fil.
💡 Snabb översikt:
- Hur du hittar identifieraren (handle) för ett tilläggs CSS-fil via id-attributet i sidans källkod
- Hur du inaktiverar stilar med kombinationen wp_dequeue_style + wp_deregister_style med rätt prioritet
- Hur du slår ihop inaktiverade stilar till en enda fil och laddar den asynkront via media print, utan att förlora stilsättningen och utan att blockera renderingen
Hur du hittar ett tilläggs CSS-filidentifierare
WordPress tilldelar en unik identifierare, en handle, till varje köad stilfil. Det är denna handle som funktionerna wp_dequeue_style (dokumentation) och wp_deregister_style (codex) kräver. Utan rätt handle inaktiveras ingenting.
Den mest tillförlitliga metoden är att titta på sidans HTML-källkod. Att gissa utifrån tilläggets namn fungerar inte; tilläggsutvecklaren namnger handlen hur de vill, och logiken kan vara otydlig.
Öppna sidkällan (Ctrl+U eller view-source: före URL:en) och hitta <link>-taggen som laddar CSS:en för det tillägg du behöver. För Elementor ser det till exempel ut så här:
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">
Titta på id-attributet. WordPress konstruerar det enligt mönstret: **tilläggets handle + suffixet **-css. I exemplet ovan, id="elementor-animations-css", vilket betyder att handlen är elementor-animations. Ta bort -css från slutet av id-värdet, så får du den exakta handlen för inaktivering. Detta fungerar för alla tillägg eller teman.
Det finns fall där utvecklaren inte inkluderar något id på <link>-taggen alls. I så fall, leta efter närliggande element med ett id eller kontrollera <script>-taggarna för samma tillägg: skript använder suffixet -js, och handlen matchar ofta stilens. Om du fortfarande inte hittar den, öppna tilläggets källkod i /wp-content/plugins/... och hitta anropet till wp_enqueue_style(): det första argumentet är handlen.
Inaktivera stilar: wp_dequeue_style och wp_deregister_style
WordPress tillhandahåller två funktioner för att hantera stilar. Skillnaden är fundamental:
Funktion | Vad den gör | När den används |
|---|---|---|
| Tar bort stilen från utdatakön i | Stilen är registrerad och köad, standardfallet |
| Tar helt bort stilens registrering från systemet | Du behöver inte bara dölja den, utan ersätta den med din egen version eller exkludera den permanent |
I praktiken används båda funktionerna tillsammans: wp_dequeue_style tar bort den från kön, och sedan säkerställer wp_deregister_style i codex att ingen annan kod återköar den handlen via beroendekedjan.
Grundläggande kod för functions.php
Koden nedan inaktiverar stilar från två tillägg: full-screen-search och prettyPhoto. Den höga prioriteten 9999 säkerställer att inaktiveringen körs EFTER att tillägget har registrerat och köat sina stilar. Utan den förhöjda prioriteten kan funktionen köras innan tillägget, och då finns det inget att inaktivera.
1 /** 2 * Disable CSS files of specific plugins. 3 * Priority 9999 — runs last in the wp_enqueue_scripts chain. 4 */ 5 function 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 } 14 add_action( 'wp_enqueue_scripts', 'sdstudio_dequeue_plugin_styles', 9999 );
Vad som är viktigt här: hooken wp_enqueue_scripts är rätt plats för den här operationen. Inte wp_head, inte init, inte wp_loaded. Det är på wp_enqueue_scripts som WordPress bygger upp stil-kön, och det är här du ska inaktivera dem, bara senare än vad pluginsen gör.
Varför prioritet 9999, inte 11 eller 99
Plugins registrerar stilar med standardprioriteten 10. Men vissa sätter 20, 50 eller till och med 100 när de har komplexa beroendekedjor. En prioritet på 9999 täcker i stort sett alla verkliga scenarier. Den enda nackdelen: om två av dina egna snuttar delar samma prioritet 9999 är deras körordning odefinierad. I praktiken är detta ovanligt, medan 11 regelbundet misslyckas med "envisa" plugins.
Dessutom kan du registrera inaktiveringen på hooken wp_head med samma prioritet som ett skyddsnät för stilar som ett plugin köar genom att kringgå wp_enqueue_scripts och skriva ut direkt i <head>:
1 add_action( 'wp_head', 'sdstudio_dequeue_plugin_styles', 9999 );
Men detta är en fallback. Normalt räcker en enda wp_enqueue_scripts.
Hur man inaktiverar ALLA stilar från ett specifikt plugin
Många plugins har inte bara en CSS-fil, utan flera. Contact Form 7, WooCommerce, Elementor, var och en drar in 3-5 stilfiler. Att inaktivera dem en och en är omständligt. Skanna sidkällan och samla alla handtag med samma prefix: de är vanligtvis grupperade tillsammans.
Exempel för Elementor, en typisk uppsättning handtag: elementor-frontend, elementor-animations, elementor-icons och elementor-pro. Alla fyra i ett enda anrop:
1 function 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 } 13 add_action( 'wp_enqueue_scripts', 'sdstudio_dequeue_elementor_styles', 9999 );
Vad man gör med inaktiverade stilar
Att inaktivera är bara halva jobbet. Om du helt enkelt tar bort ett plugins CSS går allt på sidan sönder: formulär blir feljusterade, reglage faller isär, ikoner försvinner. Stilarna behövs, bara inte till priset av att blockera renderingen.
Rätt tillvägagångssätt: kombinera de inaktiverade stilarna till EN kompakt fil och ladda den utan att blockera. Algoritmen:
- Inaktiverade plugin-stilar via
wp_dequeue_style+wp_deregister_style. - Kopierade innehållet i VARJE inaktiverad CSS-fil. Ta dem från plugin-mappen, inte från webbläsarens inspector, som visar en minifierad build som är obekväm att arbeta med.
- Kombinerade dem till en enda fil, till exempel
/wp-content/themes/your-theme/css/dequeued-plugins.css. - Laddade den med attributet
media="print"ochonload="this.media='all'". Webbläsaren laddar ner filen asynkront utan att blockera renderingen och tillämpar stilarna efter laddning.
Laddningskod för kombinerad fil
1 /** 2 * Load the combined CSS file of disabled styles asynchronously. 3 */ 4 function 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 } 12 add_action( 'wp_enqueue_scripts', 'sdstudio_enqueue_dequeued_styles', 1 );
Prioriteten 1 här är avsiktlig: den kombinerade filen måste köas INNAN inaktiveringsfunktionerna med prioritet 9999 körs. Annars kan WordPress misslyckas med att känna igen beroendet och helt enkelt ta bort stilarna från kön.
Asynkron laddning utan ett plugin
För att förhindra att webbläsaren väntar på CSS-filen innan sidan renderas, lägg till attributen media="print" och onload via filtret style_loader_tag:
1 /** 2 * Change media="print" to onload-switch for asynchronous CSS loading. 3 */ 4 function 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 } 14 add_filter( 'style_loader_tag', 'sdstudio_async_css', 10, 2 );
Mekanismen är okomplicerad: webbläsaren ser media="print" och blockerar inte renderingen, eftersom utskriftsmedietypen inte påverkar skärmen. Efter att filen har laddats aktiveras onload, växlar media till all, och stilarna tillämpas omedelbart. Användaren ser en fullständigt stilad sida utan fördröjning vid första laddning.
När du inte ska inaktivera stilar via functions.php
Metoden wp_dequeue_style är kraftfull, men inte universell. Här är tre fall där den antingen är verkningslös eller skadlig:
Stilar är inbäddade inline via
wp_add_inline_style. Sådana stilar ligger inuti en<style>-tagg och har inget separat handle. Du måste inaktivera dem viawp_deregister_scriptpå det överordnade skriptet eller hitta den hook som tillägget använder för att lägga till inline-stilar.Tillägget skjuter in CSS direkt i
<head>viaecho. Detta är en workaround som används av vissa äldre tillägg. Bara att hitta den specifika hooken eller, som en sista utväg, output buffering hjälper här.Du arbetar med ett tredjepartstema som hanterar beroenden på egen hand. Vissa teman, särskilt premiumteman, använder sin egen asset loader som går förbi
WP_Styles. Innan du skriver kod, kontrollera tematsheader.php: om du ser ett direktecho '<link...'kommer deregistreringssystemet inte att fungera.
I dessa fall är det bättre att använda specialiserade tillägg som Asset CleanUp eller Perfmatters, som arbetar på URL-nivå och inaktiverar assets per sida utan att du behöver gräva i hooks.
Se videoguiden om att inaktivera stilar: hela processen från att hitta handlet till att verifiera resultatet på 8 minuter.
⁉️🤔 Vanliga frågor
Behöver jag inaktivera CSS-stilar i adminpanelen (*/wp-admin/*)?
Nej. Stilar som laddas via hooken
admin_enqueue_scriptspåverkar inte frontend och behöver inte inaktiveras. Att försöka deregistrera adminstilar viawp_enqueue_scriptsgör dessutom ingenting, eftersom de registreras separat. Om adminpanelen är långsam ligger problemet oftast någon annanstans: tunga analysskript i dashboarden, externa Google Fonts eller Heartbeat API.
Är det säkert* att ta bort -css från id-attributet för att få handlet? Fungerar den regeln alltid?*
Ja, suffixet
-cssläggs till av WordPress kärna i metodenWP_Dependencies::enqueue()sedan version 2.6; detta är en oföränderlig mekanism. Men det finns en nyans: om tilläggsutvecklaren manuellt tilldelade ett anpassatidtill<link>-taggen kan suffixet saknas. I så fall är handlet det andra argumentet i anropetwp_enqueue_style()i tilläggets källkod.-css-regeln täcker de allra flesta fall.
Kan jag inaktivera stilar bara på specifika sidor?
Ja, och det är det korrekta produktionssättet. Slå in
wp_dequeue_style-anropet i en WordPress conditional tag:is_front_page()för startsidan,is_single()för inlägg,is_page()för sidor,is_archive()för arkiv. För att exkludera efter inläggs-ID, använd! is_single(123). Villkorlig dequeuing på specifika URL:er minskar belastningen över hela webbplatsen, inte bara där tillägget inte behövs.
Vad händer om jag anropar wp_dequeue_style för ett handle som inte är registrerat?
Ingenting. Funktionen slutförs tyst utan fel, PHP-notiser eller varningar. Detta är ofarligt. Men förlita dig inte på det som en strategi: samla handlen endast från riktiga sidor, annars samlar din kod på sig "döda" rader som inte gör något och bara skräpar ner
functions.php.
Hur verifierar jag att en stil faktiskt inaktiverades, och inte bara slutade tillämpas på grund av cache?
Öppna sidkällan (
Ctrl+U), inte utvecklarpanelen. Leta efter en<link>med tilläggets handle eller dessid. Om taggen är borta är stilen inaktiverad. Webbläsarens cache påverkar inte källkoden, till skillnad från Nätverk-fliken i DevTools. Dessutom kan du rensa WordPress-cachen: vilket cachingtillägg som helst, sedan Purge All.
Huvudpunkter om att inaktivera CSS i WordPress
Tre huvudsakliga slutsatser från hela denna guide:
Handlet är nyckeln till allt. Utan rätt identifierare fungerar ingen funktion. Hitta alltid handlet via
id-attributet i sidans källkod. Regeln att ta bort-cssfungerar nästan jämt; för undantag, kontrollera tilläggets källkod.Dequeue + Deregister är standardkombinationen. Den första funktionen tar bort stilen från kön, den andra säkerställer att den inte dyker upp igen via beroendekedjan. Prioritet
9999täcker alla "envisa" tillägg, och hookenwp_enqueue_scriptsär den enda korrekta platsen för denna operation.Inaktiverade stilar ska inte försvinna. Kombinera dem till en enda fil och ladda den asynkront via
media="print"+onload. Användaren får en fullt stylad sida, och webbläsaren väntar inte på CSS innan rendering.
Testa det på ett eller två tillägg idag. Ett par minuter i functions.php, och resultatet syns direkt i PageSpeed Insights. Börja med det "tyngsta" tillägget, det med flest CSS-filer: inaktivera, kombinera, mät hastighet. Troligtvis räcker det ensamt för att flytta från den orangea zonen till den gröna.



