Skip to content

Alles für WordPress, Webentwicklung — und mehr

🚫 So deaktivieren Sie WordPress-Plugins selektiv auf bestimmten Seiten und Beiträgen

🚫 So deaktivieren Sie WordPress-Plugins selektiv auf bestimmten Seiten und Beiträgen

Jedes WordPress-Plugin fügt PHP-Code hinzu, der beim Seitenaufruf ausgeführt wird, Skripte und Styles lädt und manchmal zusätzliche Datenbankabfragen durchführt. Je mehr Plugins Sie einsetzen, desto schwerer werden Ihre Seiten. Das Problem ist aber nicht nur die Menge: Selbst ein einzelnes „geschwätziges" Plugin wie Contact Form 7 lädt seine .css- und .js-Dateien standardmäßig auf jeder Seite, auch auf solchen, auf denen gar kein Formular existiert.

Die CF7-Entwickler räumen offen ein, dass das Plugin Ressourcen überall lädt, weil der Shortcode an beliebiger Stelle vorkommen kann. Diese Logik ist nicht CF7-spezifisch; die meisten Plugins funktionieren so. Das Ergebnis: Die Startseite Ihres Blogs lädt Skripte für einen Galerie-Slider, der dort nie eingebunden war.

Die gute Nachricht: WordPress erlaubt es Ihnen, das Laden von Plugins selektiv nur auf den Seiten zu unterbinden, auf denen sie tatsächlich benötigt werden. Wir behandeln beide Ansätze: den programmatischen (mittels eines mu-Plugins mit dem option_active_plugins-Filter) und den pluginbasierten (Plugin Organizer, Perfmatters, Plugin Load Filter). Am Ende messen wir die Ergebnisse mit der Netzwerkanalyse des Browsers.

💡 Kurzüberblick:

  • Wählen Sie Plugins nach drei Kriterien aus: Reputation des Entwicklers, Performance unter Last und tatsächliche Notwendigkeit
  • Programmatischer Ansatz: Schreiben Sie einen PHP-Schnipsel, der get_option('active_plugins') nutzt, um die Liste der aktiven Plugins zu holen und sie nach Seiten-URL zu filtern
  • Mu-Plugin: Platzieren Sie den Filter in /wp-content/mu-plugins/, damit er VOR allen regulären Plugins ausgeführt wird und nicht benötigte im laufenden Betrieb deaktiviert
  • Plugin-Ansatz: Plugin Organizer und Perfmatters bieten eine visuelle Oberfläche für dieselben Aufgaben, ohne eine einzige Codezeile schreiben zu müssen
  • Messen Sie den Effekt mit den Chrome-/Firefox-DevTools: Nach der Filterung sinken die HTTP-Requests und die Ladezeit nimmt spürbar ab

Drei Regeln für die Plugin-Auswahl

Bevor Sie das Laden von Plugins filtern, stellen Sie sicher, dass die Plugins auf Ihrer Website tatsächlich einen Platz in wp_options verdienen. Drei Regeln, die Ihnen Kopfschmerzen und Serverressourcen ersparen.

Installieren Sie nur verifizierte Plugins von Entwicklern mit nachweislicher Erfahrung. Öffnen Sie die Plugin-Seite auf WordPress.org und prüfen Sie: Anzahl der aktiven Installationen, Bewertung, Datum des letzten Updates und Anzahl der gelösten Support-Tickets. Ein Plugin mit über 100.000 Installationen, einer Bewertung von 4,5 oder höher und einem Update innerhalb der letzten 3 Monate ist eine sichere Wahl.

Plugin-Seite im WordPress-Verzeichnis

Bevorzugen Sie skalierbare Plugins. Zwei Plugins mit identischer Funktionalität können die Geschwindigkeit unterschiedlich beeinflussen. Vergleichen Sie Kandidaten mit dem Browser-Inspektor (Tab „Netzwerk") oder Online-Diensten wie Google PageSpeed Insights, Pingdom und GTmetrix; messen Sie Ladezeit und Anzahl der HTTP-Requests vor und nach der Installation.

Behalten Sie keinen Ballast. Jedes ungenutzte Plugin bedeutet zusätzlichen PHP-Code bei jeder Anfrage. Überprüfen Sie regelmäßig Ihre Liste aktiver Plugins und entfernen Sie die, auf die Ihre Website verzichten kann. Wenn ein Plugin „in sechs Monaten vielleicht nützlich sein könnte", deaktivieren und löschen Sie es und installieren Sie in sechs Monaten eine frische Version.

Praxisbeispiel: Contact Form 7

Contact Form 7 ist das perfekte Testobjekt. Es fügt jeder Seite hinzu:

  • style.css für Formularstile
  • scripts.js für Validierungs- und Übertragungslogik

Selbst wenn eine Seite keinen [contact-form-7]-Shortcode enthält, werden beide Dateien brav geladen. Der folgende Screenshot zeigt das Netzwerk-Panel der Chrome-DevTools, das nicht lügt:

Netzwerk-Übersicht mit Contact Form 7 Plugin-Ressourcen

Die Lösung: Entweder die Ladelogik innerhalb des Plugins ändern (was bei einem Update überschrieben wird) oder das Plugin selektiv für alle Seiten außer der benötigten deaktivieren. Der zweite Ansatz ist zuverlässiger, also konzentrieren wir uns darauf.

Schritt 1. Die Liste der aktiven Plugins per PHP abrufen

Bevor Sie filtern, müssen Sie verstehen, wo WordPress die Liste der aktiven Plugins speichert. Sie befinden sich alle in der Tabelle wp_options, in der Zeile mit dem Schlüssel active_plugins. Das Array rufen Sie mit einer einzigen get_option-Funktion ab.

Fügen Sie diesen Code dem Code Snippets-Plugin oder Ihrer eigenen Plugin-Datei hinzu (vergessen Sie nicht den Plugin-Header am Anfang):

1<?php
2/**
3 * Plugin Name: Active Plugins Lister
4 */
5
6add_shortcode( 'activeplugins', function() {
7 $active_plugins = get_option( 'active_plugins' );
8 $plugins = "";
9 if ( count( $active_plugins ) > 0 ) {
10 $plugins = "<ul>";
11 foreach ( $active_plugins as $plugin ) {
12 $plugins .= "<li>" . $plugin . "</li>";
13 }
14 $plugins .= "</ul>";
15 }
16 return $plugins;
17} );

Speichern Sie die Datei als active-plugins.php und laden Sie sie nach /wp-content/plugins/ hoch. Erstellen Sie eine Testseite, fügen Sie den Shortcode [activeplugins] ein, und Sie erhalten eine nummerierte Liste aller aktiven Plugins im Format folder/file.php.

wp_options-Tabelle mit aktiven Plugins

So sieht das Ergebnis nach dem Einfügen des Shortcodes auf einer Seite aus:

Liste aktiver Plugins via Shortcode

Schritt 2. Der option_active_plugins-Filter: Ihr zentrales Werkzeug

Nun zum zentralen Werkzeug: dem Filter option_active_plugins. Er gehört zur Filterfamilie option_$option_name und wird jedes Mal ausgelöst, wenn WordPress einen Optionswert aus der Datenbank abruft. Da aktive Plugins als Option active_plugins gespeichert werden, können Sie mit diesem Filter das Array im laufenden Betrieb verändern: unerwünschte Plugins entfernen oder neue hinzufügen.

Hier ein minimales Beispiel, das Advanced Custom Fields programmatisch aktiviert (vorausgesetzt, das Plugin ist bereits installiert):

1add_filter( 'option_active_plugins', function( $plugins ) {
2 $myplugin = "advanced-custom-fields/acf.php";
3 if ( ! in_array( $myplugin, $plugins ) ) {
4 $plugins[] = $myplugin;
5 }
6 return $plugins;
7} );

Dieser Code fügt ACF auf jeder Seite zur Liste der aktiven Plugins hinzu. Nicht sonderlich praxistauglich, aber das Prinzip ist klar: Sie können das $plugins-Array beliebig modifizieren.

Wichtiger Hinweis: Der Filter muss vor den regulären Plugins ausgeführt werden, andernfalls liest WordPress zuerst die ungefilterte Liste. Genau dafür sind mu-Plugins da.

Schritt 3. Ein mu-Plugin für selektives Deaktivieren erstellen

Must-Use-Plugins liegen in /wp-content/mu-plugins/ und werden vor allen regulären Plugins ausgeführt. Genau das brauchen wir: Unser Filter erhält zuerst die Kontrolle.

Es gibt einen Haken: Die bedingten Tags von WordPress (is_page(), is_single() und andere) funktionieren nicht in mu-Plugins, da die Anfrage zu diesem Zeitpunkt noch nicht geparst wurde und sie daher alle false zurückgeben. Sie müssen die URL manuell über $_SERVER['REQUEST_URI'] auswerten.

Hier ein einsatzbereites mu-Plugin, das Contact Form 7 auf allen Seiten außer /contact/ deaktiviert:

1$request_uri = parse_url( $_SERVER['REQUEST_URI'], PHP_URL_PATH );
2$is_admin = strpos( $request_uri, '/wp-admin/' );
3
4if ( false === $is_admin ) {
5 add_filter( 'option_active_plugins', function( $plugins ) {
6 global $request_uri;
7
8 $is_contact_page = strpos( $request_uri, '/contact/' );
9 $myplugin = "contact-form-7/wp-contact-form-7.php";
10 $k = array_search( $myplugin, $plugins );
11
12 if ( false !== $k && false === $is_contact_page ) {
13 unset( $plugins[ $k ] );
14 }
15
16 return $plugins;
17 } );
18}

Gehen wir es Zeile für Zeile durch:

  • parse_url( $_SERVER['REQUEST_URI'], PHP_URL_PATH ) extrahiert den Anfragepfad (zum Beispiel /blog/kak-otkljuchit-plaginy/)
  • strpos( $request_uri, '/wp-admin/' ) prüft, ob wir uns im Admin-Bereich befinden; falls ja, greift der Filter nicht, sodass die Plugin-Einstellungsseiten erreichbar bleiben
  • array_search( $myplugin, $plugins ) findet CF7 im Array der aktiven Plugins
  • unset( $plugins[ $k ] ) entfernt das Plugin aus der Liste, wenn wir uns NICHT auf der Kontaktseite befinden

Speichern Sie die Datei, laden Sie sie nach /wp-content/mu-plugins/ hoch und leeren Sie den Cache. Nun sollte der Shortcode [activeplugins] Contact Form 7 nur auf der Seite /contact/ anzeigen.

So sieht dasselbe Prinzip für mehrere Plugins auf einmal aus. Statt array_search mit einem einzelnen Plugin verwenden Sie ein Array und array_diff:

1$request_uri = parse_url( $_SERVER['REQUEST_URI'], PHP_URL_PATH );
2$is_admin = strpos( $request_uri, '/wp-admin/' );
3
4if ( false === $is_admin ) {
5 add_filter( 'option_active_plugins', function( $plugins ) {
6 global $request_uri;
7
8 $is_contact_page = strpos( $request_uri, '/contact/' );
9 $myplugins = array(
10 "contact-form-7/wp-contact-form-7.php",
11 "code-snippets/code-snippets.php",
12 "query-monitor/query-monitor.php",
13 "autoptimize/autoptimize.php"
14 );
15
16 if ( false === $is_contact_page ) {
17 $plugins = array_diff( $plugins, $myplugins );
18 }
19
20 return $plugins;
21 } );
22}

Die Funktion array_diff gibt Werte aus dem ersten Array zurück, die nicht im zweiten enthalten sind, genau das, was Sie für das massenhafte Deaktivieren benötigen.

Das Ergebnis ist sofort im Netzwerk-Panel sichtbar: Die Datei script.js von Contact Form 7 verschwindet auf allen Seiten außer der Kontaktseite aus der Ressourcenliste.

Seitenressourcen-Liste ohne Contact Form 7 Skript

Der programmatische Ansatz ist flexibel, erfordert aber Code-Änderungen für jedes neue Plugin. Für diejenigen, die eine visuelle Oberfläche bevorzugen, gibt es fertige Filter-Plugins.

Plugin-basierter Ansatz: Filtern ohne Code

Plugin Load Filter

Plugin Load Filter ist ein kostenloses Werkzeug zum Filtern von Plugins nach mehreren Bedingungen. Es unterstützt:

  • Filtern nach Beitragstyp (Beiträge, Seiten, benutzerdefinierte Beitragstypen)
  • Filtern nach Beitragsformat
  • Ausnahmen für Jetpack-Module
  • URL-Filterung für REST-API-, Heartbeat-, AJAX- und AMP-Anfragen
Plugin Load Filter Oberfläche

Einstellungen zur Aktivierung des Filters nach Seitentyp:

Seiteneinstellungen für Plugin Load Filter

Nach der Aktivierung legt der Administrator über den Reiter „Filter Activation by Page Type" fest, auf welche Seiten der Filter angewendet wird. Minimalistisch und übersichtlich.

Plugin Organizer

Plugin Organizer ist ein Veteran unter den Filter-Plugins mit einer 5-Sterne-Bewertung. Es gibt Ihnen die volle Kontrolle über das Laden:

  • selektives Deaktivieren von Plugins nach Seiten-URL
  • Deaktivieren nach Benutzerrolle
  • Plugin-Gruppen (mehrere auf einmal aktivieren/deaktivieren)
  • Ändern der Plugin-Ladereihenfolge
Plugin Organizer globale Einstellungsseite

Auf der Seite „Global Plugins" können Sie per Drag-and-Drop ein Plugin global für die gesamte Website deaktivieren und es auf bestimmten Seiten über eine Metabox im Beitragseditor gezielt wieder aktivieren. Im folgenden Screenshot ist Contact Form 7 global deaktiviert:

Contact Form 7 global deaktiviert im Plugin Organizer

Und hier dieselbe Metabox im Bearbeitungsbildschirm der Kontaktseite, die die globalen Einstellungen überschreibt:

Plugin Organizer Metabox auf der Kontaktseite

Plugin Organizer zeigt zudem Debugging-Informationen an: welche Plugins auf jeder Seite tatsächlich geladen wurden und warum. Eine Dokumentation ist auf der Website des Entwicklers verfügbar.

Perfmatters

Perfmatters ist ein Premium-Tool vom Kinsta-Entwicklungsteam. Seine Hauptfunktion, der Script Manager, gruppiert alle Skripte und Styles nach Plugin- oder Theme-Namen.

Perfmatters Script Manager

Sie können ein Plugin vollständig deaktivieren oder gezielt einzelne CSS-/JS-Dateien darin entfernen. Für Websites mit komplexen URL-Strukturen gibt es die Skript-Deaktivierung mittels regulärer Ausdrücke.

Drei Szenarien, in denen Perfmatters sofortige Verbesserungen bringt:

  • Social-Media-Plugins (Share-Buttons): überall deaktiviert außer in Blogbeiträgen
  • Contact Form 7: überall deaktiviert außer auf der Formularseite
  • Gutenberg-Block-Editor-Styles (block-library/style.min.css und theme.min.css): entfernt bei Websites, die den Classic Editor nutzen

In einem unabhängigen Test auf woorkup.com reduzierte die Deaktivierung unnötiger Skripte via Perfmatters die Gesamtladezeit um 20,2%, die HTTP-Requests auf der Startseite von 46 auf 30 und die Seitengröße von 506,3 KB auf 451,6 KB.

Speedtest-Ergebnisse mit Perfmatters

Perfmatters ist ein kostenpflichtiges Plugin, und der Einsatz ist bei Websites gerechtfertigt, bei denen Geschwindigkeit direkt die Conversion beeinflusst. Für einen kleinen Blog genügen Plugin Organizer oder ein programmatisches mu-Plugin.

Ergebnisse messen mit dem Netzwerkmonitor des Browsers

Optimierung ohne Messung ist Rätselraten. Die Browser-DevTools liefern Ihnen ein präzises Vorher-Nachher-Bild ohne externe Dienste. Jeder moderne Browser funktioniert:

Auf einer Test-WordPress-Installation mit 18 aktiven Plugins haben wir die Seitengeschwindigkeit vor der Filterung gemessen (leerer Cache, Firefox-Netzwerkmonitor):

Firefox Performance-Analyse vor der Optimierung

Ergebnis: 255,19 KB, Ladezeit 1,24 Sekunden, 12 Requests.

Nach der Installation von Plugin Organizer und der globalen Deaktivierung von Contact Form 7 änderte sich das Kreisdiagramm:

Firefox Performance-Analyse nach Deaktivierung von CF7

Metriken: 104,21 KB, Ladezeit 0,80 Sekunden, 8 Requests.

Abschließend deaktivierten wir alle ungenutzten Plugins:

Firefox Performance-Analyse nach vollständiger Optimierung

Endergebnis: 101,98 KB, Ladezeit 0,46 Sekunden, 8 Requests.

Vergleicht man die Extremwerte: Die Ressourcengröße hat sich mehr als halbiert (von 255 auf 102 KB), die Ladezeit sank von 1,24 auf 0,46 Sekunden und die HTTP-Requests gingen von 12 auf 8 zurück. Die Zahlen sprechen für sich: Gezieltes Deaktivieren von Plugins bringt selbst bei einer kleinen Website spürbare Geschwindigkeitsgewinne, und eine Verschlechterung von TTFB und LCP wirkt sich unmittelbar auf das Suchranking aus.

⁉️🤔 Häufig gestellte Fragen

Ist ein mu-Plugin zwingend erforderlich oder kann ich den Code in einem normalen Plugin belassen?

Sie können ein normales Plugin verwenden, aber die Ladereihenfolge kann alles zunichtemachen. Wenn Ihr option_active_plugins-Filter greift, nachdem WordPress die Liste der aktiven Plugins bereits eingelesen hat, funktioniert er nicht. Ein mu-Plugin ist der einzige Weg, um sicherzustellen, dass Ihr Filter vor allen anderen Plugins die Kontrolle übernimmt. Bei einem normalen Plugin sind Sie von der alphabetischen Reihenfolge oder Hooks abhängig, die sich nach jedem Update eines anderen Plugins ändern können.

Was tun, wenn ich den mu-plugins-Ordner auf meinem Hosting nicht anlegen kann?

Sie können den Ordner /wp-content/mu-plugins/ per FTP, über den Dateimanager Ihres Hosters oder per WP-CLI mit dem Befehl wp scaffold mu-plugin anlegen. Wenn Sie überhaupt keinen Dateisystemzugriff haben, nutzen Sie Plugin Organizer: Das Plugin erreicht dasselbe über einen eigenen Filtermechanismus und erfordert keine Bearbeitung von Serverdateien. Die meisten Hoster gewähren Zugriff auf wp-content über einen Dateimanager im Bedienfeld. Ordnerberechtigungen: 0755.

Beeinträchtigt das Deaktivieren eines Plugins per Filter dessen Einstellungen?

Nein, Plugin-Einstellungen werden in der Datenbank (Tabelle wp_options) gespeichert und bleiben unberührt. Sie verhindern lediglich, dass WordPress den Code des Plugins bei der Verarbeitung einer bestimmten Anfrage lädt. Alle Einstellungen bleiben erhalten, und bei der nächsten Anfrage, bei der das Plugin nicht gefiltert wird, lädt es mit vollem Funktionsumfang. Das Deaktivieren per option_active_plugins blockiert gezielt das Laden des Codes zur Laufzeit, nicht die Deaktivierung. Im Admin-Bereich bleibt das Plugin aktiv, seine Einstellungen werden nicht angetastet und geplante Aufgaben (WP-Cron) funktionieren weiterhin.

Wie kann ich überprüfen, ob der Filter tatsächlich funktioniert?

Die anschaulichste Methode ist das Netzwerk-Panel in den Chrome DevTools (F12 → Netzwerk). Öffnen Sie es auf einer Seite, auf der das Plugin deaktiviert sein sollte, laden Sie die Seite mit gedrückter Strg-Taste neu (Cache leeren) und suchen Sie nach dem Plugin-Namen oder seiner CSS-/JS-Datei. Werden keine Requests angezeigt, funktioniert der Filter. Plugins wie Query Monitor zeigen ebenfalls die Liste der geladenen Komponenten und deren Ausführungszeit an. Geben Sie bei Contact Form 7 contact-form-7 in die Netzwerk-Suche ein; hat der Filter funktioniert, sehen Sie style.css oder scripts.js von CF7 nicht in der Liste der geladenen Ressourcen.

Macht es Sinn, Plugins auf einer sehr kleinen Website mit nur 5-7 Plugins zu deaktivieren?

Wenn alle 5 Plugins tatsächlich auf jeder Seite benötigt werden, nein. Aber selbst auf einer kleinen Website gibt es oft ein paar Plugins, die nur auf einer Seite arbeiten: ein Kontaktformular, eine Portfolio-Galerie, ein Homepage-Slider. Diese beiden auf anderen Seiten zu deaktivieren, reduziert die HTTP-Requests spürbar und beschleunigt den Seitenaufbau. Wie wir oben an der Testinstallation gesehen haben, spart bereits ein einziges gefiltertes Plugin dutzende Millisekunden ein. Bei einer Website mit über 1.000 täglichen Besuchern summieren sich diese Millisekunden zu einem spürbaren Unterschied, sowohl für den Nutzer als auch für die Core Web Vitals.

Code, Plugin oder Perfmatters: Was Sie für Ihre Aufgabe wählen sollten

Wenn Ihre Website 5 Plugins hat und alle tatsächlich auf jeder Seite benötigt werden, ist dieser Leitfaden nichts für Sie. Eine typische WordPress-Website umfasst jedoch 15-25 aktive Plugins, von denen auf einer beliebigen Seite nur 5-7 tatsächlich arbeiten. Der Rest verbraucht lediglich Serverzeit und verlangsamt den Seitenaufbau.

Ein programmatisches mu-Plugin ist ein kostenloser, schlanker und vollständig kontrollierbarer Ansatz, erfordert aber Aufmerksamkeit bei jedem neuen Plugin. Plugin Organizer ist der optimale Mittelweg: visuelle Oberfläche, Flexibilität und kostenlos. Perfmatters ist die Wahl für kommerzielle Projekte, bei denen jede Zehntelsekunde Ladezeit in Geld umgerechnet wird.

Falls Sie mehr Plugins angesammelt haben, als Sie benötigen, beginnen Sie mit einem Audit und der Bereinigung ungenutzter Plugins und übernehmen Sie dann die Kontrolle über das Laden der verbleibenden. Wählen Sie Ihren Ansatz nach Komfortniveau und Seitenlast, und Sie werden den Unterschied bereits bei Ihrer ersten Netzwerk-Messung sehen. Warten Sie nicht, bis Plugins Ihren TTFB auffressen.