Ein WordPress-mu-plugin (Must-Use-Plugin) ist eine PHP-Datei im Verzeichnis wp-content/mu-plugins/, die WordPress bei jedem Aufruf automatisch lädt. Es lässt sich nicht über den Admin-Bereich deaktivieren und wird vor jedem regulären Plugin ausgeführt. Nutzen Sie es für Code, der immer vorhanden sein muss: eigene Hooks, Sicherheitsregeln, Performance-Anpassungen oder früh geladene Konstanten.
Ein weiterer Anwendungsfall für ein mu-plugin besteht darin, einem Plugin oder dem WP-Core zusätzliche Funktionen hinzuzufügen. WP STAGING verfügt beispielsweise über zahlreiche Filter und Hooks, die der Staging- oder Backup-Funktion von WP STAGING weitere Möglichkeiten verleihen können. All diese dokumentierten Filter können in ein eigenes mu-plugin aufgenommen werden.
Kurze Antwort: Legen Sie eine
.php-Datei mit einem Plugin-Header inwp-content/mu-plugins/ab. WordPress erkennt sie beim nächsten Seitenaufruf, ganz ohne Aktivierung. Prüfen Sie unter Plugins → Must-Use-Plugins, ob sie geladen wurde.
Einführung in Must-Use-Plugins
Mu-plugins liegen im Verzeichnis wp-content/mu-plugins/ (der Pfad wird über die Konstante WPMU_PLUGIN_DIR gesteuert) und werden von WordPress vor jedem Plugin in wp-content/plugins/ geladen. Sie erscheinen nicht in der Standard-Plugin-Liste und lassen sich nicht über die Admin-Oberfläche deaktivieren.
Das häufigste Szenario, in dem Entwickler zu einem mu-plugin greifen: Sie haben eine Funktion oder einen Filter, der immer wieder ausfällt, weil ein anderer Administrator das Plugin deaktiviert, das ihn enthielt, oder weil ein Plugin-Update eine Anpassung überschreibt. Ein mu-plugin beseitigt beide Risiken auf einen Schlag.
Die offizielle WordPress-Dokumentation behandelt Must-Use-Plugins unter wordpress.org/documentation/article/must-use-plugins/.
Wie schneidet ein mu-plugin im Vergleich zu anderen Orten ab, an denen Sie denselben Code ablegen könnten?
| Option | Lädt automatisch | Übersteht Plugin-Updates | Admin kann deaktivieren | Am besten geeignet für |
|---|---|---|---|---|
| mu-plugin | Ja | Ja | Nein | Immer benötigte Hooks, Konstanten, Sicherheitsregeln |
| Reguläres Plugin | Nur wenn aktiv | Ja | Ja | Optionale Funktionen unter Kontrolle des Website-Betreibers |
wp-config.php |
Ja | Ja | Nein | Nur PHP-define()-Konstanten |
.htaccess / php.ini |
Ja (Serverebene) | Ja | Nein | Server-Rewrites und PHP-ini-Einstellungen |
Vorteile von Mu-Plugins
Der wichtigste Vorteil gegenüber einem regulären Plugin ist die Manipulationssicherheit. Ein reguläres Plugin kann von jedem Benutzer mit Administratorrechten deaktiviert oder bei kompromittierten Zugangsdaten entfernt werden. Ein mu-plugin nicht.
Nutzen Sie ein mu-plugin, wenn:
- Code auch dann laufen muss, wenn alle regulären Plugins deaktiviert sind (eine Wartungs-Weiterleitung, ein Sicherheits-Header, eine erzwungene HTTPS-Regel)
- Sie WP STAGING-Aktionen und -Filter registrieren, die vor der Initialisierung des Plugins selbst geladen werden müssen
- Sie mehrere WordPress-Sites verwalten und seitenspezifisches Verhalten außerhalb versionierter Plugins wünschen
- Sie PHP-Laufzeiteinstellungen (etwa
memory_limit) früh im Request-Lebenszyklus anwenden möchten
Nutzen Sie ein reguläres Plugin, wenn:
- Die Funktion vom Website-Betreiber oder einem Entwickler ein- und ausschaltbar sein soll
- Die Funktionalität als installierbares Produkt mit Auto-Updates ausgeliefert wird
- Sie etwas entwickeln, das andere Plugins über
is_plugin_active()erkennen
So erstellen Sie ein WordPress-mu-plugin
Schritt 1: Auf die Dateien Ihrer Website zugreifen
Verbinden Sie sich mit Ihrer Website per FTP, SFTP oder über den Dateimanager Ihres Webhosts.
Schritt 2: Das Verzeichnis mu-plugins finden oder erstellen
Navigieren Sie zu wp-content/. Suchen Sie den Ordner mu-plugins/. Falls er nicht existiert, erstellen Sie ihn. WordPress lädt PHP-Dateien aus diesem Verzeichnis sofort, ohne weitere Konfiguration.
Schritt 3: Ihre Plugin-Datei erstellen
Erstellen Sie eine neue PHP-Datei, zum Beispiel my-mu-plugin.php. Verwenden Sie im Dateinamen Kleinbuchstaben und Bindestriche (keine Leerzeichen). Der Dateiname erscheint im WordPress-Admin unter Plugins → Must-Use-Plugins, wählen Sie also einen aussagekräftigen Namen.
Schritt 4: Den Plugin-Header und Ihren Code hinzufügen
Jedes mu-plugin benötigt am Anfang einen Plugin-Header-Kommentar, genau wie ein reguläres Plugin. Nachfolgend die minimale Struktur:
<?php
/*
Plugin Name: My Custom Mu-Plugin
Description: A custom must-use plugin to enhance my WordPress site.
Version: 1.0
Author: Mickey Mouse
*/
// Your custom code goes here
Schritt 5: Ihr Mu-Plugin hochladen
Laden Sie die .php-Datei in das Verzeichnis wp-content/mu-plugins/ auf Ihrem Server hoch.
Schritt 6: Aktivierung überprüfen
Es gibt keinen Aktivierungsschritt. Öffnen Sie im WordPress-Admin Plugins → Must-Use-Plugins, um zu bestätigen, dass die Datei geladen wurde. Erscheint sie nicht, prüfen Sie, ob die Datei direkt in mu-plugins/ liegt (und nicht in einem Unterverzeichnis).
Beispiel-Mu-Plugin: Eigener Admin-Footer-Text
Hier ist ein vollständiges, funktionierendes Beispiel, das den Footer-Text am unteren Rand jeder WordPress-Admin-Seite ändert:
<?php
/*
Plugin Name: Custom Admin Footer
Description: Changes the footer text in the WordPress admin area.
Version: 1.0
Author: Your Name
*/
add_filter('admin_footer_text', function () {
echo 'Customized by Tony Stark - Powered by WordPress';
});
Häufige Anwendungsfälle für mu-plugins
Dies sind die Muster, die in WP STAGING-Support-Tickets und in Entwicklerforen am häufigsten auftauchen:
1. Debug-Logging erzwingen, ohne wp-config.php zu bearbeiten
<?php
/*
Plugin Name: Enable Debug Log
*/
if ( ! defined( 'WP_DEBUG' ) ) {
define( 'WP_DEBUG', true );
}
if ( ! defined( 'WP_DEBUG_LOG' ) ) {
define( 'WP_DEBUG_LOG', true );
}
if ( ! defined( 'WP_DEBUG_DISPLAY' ) ) {
define( 'WP_DEBUG_DISPLAY', false );
}
Das ist nützlich in Staging- oder Entwicklungsumgebungen, in denen Sie das Logging aktivieren möchten, ohne die produktive wp-config.php anzufassen. Den vollständigen Debugging-Workflow finden Sie unter Enable WordPress Debug Log Mode.
2. Das PHP-Speicherlimit erhöhen
Die ini-Direktive memory_limit lässt sich zur Laufzeit über ini_set() ändern, was ein mu-plugin zu einem sauberen Ort macht, um sie anzuwenden, bevor reguläre Plugins geladen werden:
<?php
/*
Plugin Name: Increase Memory Limit
*/
@ini_set( 'memory_limit', '256M' );
Hinweis: Einige PHP-Einstellungen sind auf Serverebene fixiert und können zur Laufzeit nicht über ini_set() geändert werden. Eine vollständige Referenz, welche Direktiven Laufzeitänderungen akzeptieren, finden Sie unter php.net/manual/en/ini.list.php.
3. WP STAGING-Filtercode
WP STAGING stellt dokumentierte Aktionen und Filter bereit, um das Backup- und Staging-Verhalten zu steuern. Da diese vor der Initialisierung von WP STAGING selbst geladen werden müssen, ist ein mu-plugin der richtige Ort, um sie zu registrieren. Platzieren Sie beliebige add_filter()– oder add_action()-Aufrufe in einer mu-plugin-Datei, und sie sind unabhängig von der Aktivierungsreihenfolge der Plugins immer vorhanden. Alle verfügbaren Hooks finden Sie in der WP STAGING-Dokumentation zu Aktionen und Filtern, die unten unter „Verwandte Artikel“ verlinkt ist.
4. Erzwungene HTTPS-Weiterleitung
<?php
/*
Plugin Name: Force HTTPS
*/
add_action( 'template_redirect', function () {
if ( ! is_ssl() ) {
wp_redirect( 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 301 );
exit;
}
} );
5. XML-RPC deaktivieren
<?php
/*
Plugin Name: Disable XML-RPC
*/
add_filter( 'xmlrpc_enabled', '__return_false' );
Einschränkungen und Fallstricke
Bevor Sie sich für ein mu-plugin entscheiden, sollten Sie einige Verhaltensweisen kennen:
Kein Deaktivierungs- oder Deinstallations-Hook. WordPress löst für mu-plugins niemals deactivate_{plugin} oder uninstall_{plugin} aus. Wenn Ihr Plugin Optionen, eigene Tabellen oder geplante Cron-Events anlegt, müssen Sie diese manuell aufräumen: die Datei löschen und anschließend die gespeicherten Daten von Hand entfernen.
Laden aus Unterverzeichnissen erfordert eine Loader-Datei. WordPress lädt nur PHP-Dateien, die direkt in wp-content/mu-plugins/ liegen. Wenn Sie Code in ein Unterverzeichnis legen (zum Beispiel mu-plugins/my-plugin/my-plugin.php), erkennt WordPress ihn nicht. Das übliche Muster besteht darin, eine schlanke Loader-Datei im Stammverzeichnis von mu-plugins/ anzulegen, die die Datei im Unterverzeichnis per require_once einbindet.
Verhalten im Multisite-Betrieb. In einem WordPress-Multisite-Netzwerk werden mu-plugins bei jedem Request über alle Sites hinweg geladen. Es gibt keinen Schalter pro Site. Verwenden Sie is_main_site() oder get_current_blog_id() innerhalb des Plugins, wenn Sie das Verhalten auf eine bestimmte Site im Netzwerk beschränken möchten.
Ladereihenfolge. Mu-plugins werden in aufsteigender alphabetischer Reihenfolge nach Dateiname geladen, vor jedem Plugin in wp-content/plugins/. Wenn die Reihenfolge zwischen Ihren mu-plugins wichtig ist, stellen Sie dem Dateinamen ein Präfix voran: 00-runs-first.php, 10-runs-second.php.
Sichtbarkeit im Admin-Bereich. Mu-plugins erscheinen unter Plugins → Must-Use-Plugins, zeigen aber keine Details an, sofern der Plugin-Header nicht Plugin Name, Description und Version enthält. Fügen Sie stets einen Header hinzu; das beschleunigt die Diagnose erheblich, wenn etwas schiefgeht.
Kein Update-Mechanismus. WordPress hat keine eingebaute Möglichkeit, Sie über mu-plugins zu informieren oder sie zu aktualisieren. Wenn Sie Fremdcode für ein mu-plugin anpassen, sind Sie selbst dafür verantwortlich, Updates zu verfolgen und manuell einzuspielen. Bei intern entwickelten mu-plugins ist das kein Problem, aber es ist erwähnenswert, falls Sie erwägen, ein Community-Plugin in ein mu-plugin umzuwandeln.
Wohin gehört dieser Code?
| Szenario | Bester Ort |
|---|---|
PHP-Konstante oder define() |
wp-config.php |
| Server-Rewrite-Regel | .htaccess |
| PHP-Speicher- oder Ausführungslimit | .htaccess (über php_value) oder php.ini |
| Code mit WordPress-Funktionen, der immer laufen muss | mu-plugin in wp-content/mu-plugins/ |
| Optionale Funktion unter Kontrolle des Website-Betreibers | Reguläres Plugin in wp-content/plugins/ |
| Theme-spezifische Ausgabe oder Style-Änderungen | functions.php des Child-Themes |
Eine nützliche Faustregel: Wenn Ihr Code eine WordPress-Funktion aufruft (add_filter, get_option, wp_redirect usw.), gehört er in ein mu-plugin. Handelt es sich um ein reines PHP-define() oder eine Anpassung, die laufen muss, bevor WordPress startet, ist wp-config.php der richtige Ort.
Fazit
Ein mu-plugin ist das richtige Werkzeug für Code, der immer laufen muss und nicht Gefahr laufen darf, versehentlich abgeschaltet zu werden. Die Einrichtung dauert nur wenige Minuten: Erstellen Sie wp-content/mu-plugins/, fügen Sie eine .php-Datei mit einem Plugin-Header hinzu, und WordPress erledigt den Rest.
Wenn Sie eigenen mu-plugin-Code entwickeln oder testen, empfehlen wir, ihn in einer Staging-Umgebung zu überprüfen, bevor Sie ihn in Produktion einsetzen. Mit WP STAGING klonen Sie Ihre Live-Site unkompliziert und stellen sicher, dass sich das mu-plugin wie erwartet verhält, bevor Ihre Änderungen live gehen.