Zum Hauptinhalt springen
S-EDV news
← Alle Anleitungen
📘 Anleitung WordPress 30.09.2026 · 11 min Lesezeit

Eigene Code-Snippets in WordPress sicher einbinden: functions.php, eigenes Plugin oder Must-Use-Plugin

Wohin mit eigenem PHP-Code in WordPress? Die Anleitung vergleicht functions.php, eigenes Plugin, Must-Use-Plugin und Code Snippets, zeigt ein getestetes Mini-Plugin und wie Sie ein fehlerhaftes Snippet ohne Adminbereich abschalten.

Mit KI erstellt – redaktionelle Prüfung ausstehend

WerbelinksMit * markierte Links sind Werbelinks: Bei einem Kauf erhalten wir eine Provision, der Preis bleibt gleich. Mehr dazu

Grafik mit der Überschrift Code-Snippets sicher einbinden und einem stilisierten WordPress-Adminbereich mit Code-Editor

Früher oder später steht in einer Anleitung oder einem Supportforum der Satz „Fügen Sie diesen Code in die functions.php ein“. Das funktioniert, hat aber einen Haken: Die functions.php gehört zum Theme. Ein Theme-Update überschreibt sie, ein Theme-Wechsel schaltet den Code ab, und ein Tippfehler legt die ganze Website lahm. Diese Anleitung zeigt, wie Sie eigene Code-Snippets so ablegen, dass sie Updates überstehen, sich sauber abschalten lassen und nachvollziehbar bleiben. Dafür vergleichen wir drei Wege: ein eigenes kleines Plugin, ein Must-Use-Plugin und das Plugin Code Snippets.

Voraussetzungen

  • WordPress ab Version 6.x, getestet mit WordPress 7.1.2 und PHP 8.4.
  • Die Rolle Administrator in WordPress.
  • Zugriff auf die Dateien der Installation per SFTP oder SSH. Ohne Dateizugriff bleibt nur der Weg über das Plugin Code Snippets, und Sie können sich bei einem Fehler nicht selbst helfen.
  • Ein Texteditor mit PHP-Unterstützung auf Ihrem Rechner. Auf dem Server hilft der Befehl php -l beim Prüfen der Syntax.
  • Ein aktuelles Backup von Dateien und Datenbank, idealerweise zusätzlich eine Staging-Kopie der Website.

Schritt 1: Entscheiden, wohin der Code gehört

Das WordPress-Handbuch für Theme-Entwickler beschreibt die functions.php als Datei, die sich wie ein Plugin verhält. Den Unterschied macht die Bindung: Code in der functions.php läuft nur, solange genau dieses Theme aktiv ist. Das Handbuch empfiehlt deshalb, Funktionen, die unabhängig vom Aussehen der Website bestehen sollen, in ein Plugin zu legen. Für die Praxis ergibt sich folgende Faustregel:

AblageortPasst fürNachteil
functions.php des Eltern-ThemesNichts EigenesWird beim Theme-Update überschrieben
functions.php eines Child-ThemesAnpassungen am Design, etwa zusätzliche Stylesheets oder BildgrößenWirkt nur, solange das Child-Theme aktiv ist
Eigenes PluginShortcodes, Filter, Beitragstypen, EinstellungenKann versehentlich deaktiviert werden
Must-Use-PluginCode, der immer laufen mussIm Adminbereich nicht abschaltbar, keine Update-Hinweise
Plugin Code SnippetsKleine Snippets ohne DateizugriffCode liegt in der Datenbank, zusätzliches Plugin mit eigener Pflege

Wie Sie ein Child-Theme anlegen, beschreibt die Anleitung WordPress-Child-Theme anlegen. Die folgenden Schritte behandeln den Weg über ein eigenes Plugin, weil er für die meisten Snippets der richtige ist.

Verifizieren: Sie können für jedes Snippet, das Sie einbauen wollen, begründen, ob es das Aussehen betrifft oder eine Funktion der Website ist. Nur im ersten Fall kommt die functions.php des Child-Themes in Frage.

Schritt 2: Ein eigenes Plugin für Ihre Snippets anlegen

Ein WordPress-Plugin ist laut Plugin-Handbuch im einfachsten Fall eine PHP-Datei mit einem Kopfkommentar, der mindestens den Namen des Plugins enthält. Das Handbuch empfiehlt einen eigenen Ordner je Plugin. Legen Sie im Verzeichnis wp-content/plugins einen Ordner an, zum Beispiel firmen-anpassungen, und darin eine gleichnamige PHP-Datei:

cd /pfad/zu/wordpress/wp-content/plugins
mkdir firmen-anpassungen
nano firmen-anpassungen/firmen-anpassungen.php

Der Inhalt beginnt mit dem Kopfkommentar. Die Zeile mit ABSPATH verhindert, dass jemand die Datei direkt im Browser aufruft:

<?php
/**
 * Plugin Name: Firmen-Anpassungen
 * Description: Eigene Code-Snippets dieser Website, unabhängig vom Theme.
 * Version: 1.0.0
 */

defined( 'ABSPATH' ) || exit;

// WordPress-Version nicht im Quelltext der Seiten ausgeben.
remove_action( 'wp_head', 'wp_generator' );

Wählen Sie einen Ordnernamen, den kein Plugin im Verzeichnis auf wordpress.org trägt. Sonst könnte ein fremdes Plugin gleichen Namens als Update angeboten werden. Für diesen Fall sieht das Plugin-Handbuch zusätzlich die Kopfzeile Update URI vor. Der Webserver muss die Datei lesen können.

Verifizieren: Unter Plugins > Installierte Plugins erscheint „Firmen-Anpassungen“ mit Ihrer Beschreibung, noch inaktiv. Auf dem Server meldet php -l firmen-anpassungen.php die Zeile No syntax errors detected.

Schritt 3: Snippets einfügen und aktivieren

Fügen Sie Ihre Snippets unterhalb der vorhandenen Zeilen ein, jedes mit einem Kommentar, der den Zweck erklärt. Ein zweites Beispiel ist ein Shortcode, der das aktuelle Jahr ausgibt, praktisch für den Footer:

// Shortcode [firmenjahr] gibt das aktuelle Jahr aus, z. B. für den Footer.
add_shortcode( 'firmenjahr', function () {
	return esc_html( wp_date( 'Y' ) );
} );

Übernehmen Sie Code aus dem Internet nur, wenn Sie verstehen, was er tut. Ein Snippet läuft mit denselben Rechten wie WordPress selbst und kann Daten lesen, ändern und nach außen senden. Setzen Sie keinen schließenden Tag ?> am Dateiende zu setzen. Leerzeichen dahinter werden sonst ausgegeben und können Fehlermeldungen zu bereits gesendeten Headern auslösen.

Aktivieren Sie das Plugin unter Plugins > Installierte Plugins über den Link „Aktivieren“ oder per WP-CLI:

wp plugin activate firmen-anpassungen
wp eval 'echo do_shortcode( "© [firmenjahr] Muster GmbH" ), "\n";'

Im Labor gab der zweite Befehl © 2026 Muster GmbH aus, und das Meta-Tag generator verschwand aus dem Quelltext der Startseite. Nach dem Deaktivieren des Plugins war es sofort wieder da. Das ist der Vorteil gegenüber der functions.php: Sie schalten Anpassungen gezielt ein und aus, ohne das Theme anzufassen.

Verifizieren: wp plugin list zeigt firmen-anpassungen als active. Die Wirkung jedes Snippets ist auf der Website sichtbar, im Beispiel das Jahr an der Stelle des Shortcodes.

Schritt 4: Must-Use-Plugins für Code, der immer laufen muss

Manche Anpassungen sollen nie versehentlich abgeschaltet werden, etwa eine Sicherheitseinstellung. Dafür gibt es das Verzeichnis wp-content/mu-plugins. Die WordPress-Dokumentation beschreibt die Eigenschaften: Must-Use-Plugins sind immer aktiv, lassen sich im Adminbereich nicht deaktivieren und laden vor den normalen Plugins in alphabetischer Reihenfolge. WordPress sucht nur nach PHP-Dateien direkt im Verzeichnis, Unterordner werden nicht automatisch geladen. Legen Sie das Verzeichnis an, falls es fehlt, und darin eine Datei:

mkdir -p wp-content/mu-plugins
nano wp-content/mu-plugins/pflicht-anpassungen.php
<?php
/**
 * Plugin Name: Pflicht-Anpassungen
 * Description: Immer aktive Einstellungen dieser Website.
 */

defined( 'ABSPATH' ) || exit;

// XML-RPC abschalten, die Website nutzt es nicht.
add_filter( 'xmlrpc_enabled', '__return_false' );

Die Dokumentation nennt auch die Kehrseite. Aktivierungs- und Deaktivierungshooks laufen hier nicht, Update-Hinweise gibt es keine, und ein fehlerhaftes Must-Use-Plugin trifft die ganze Website. Weil man es in der normalen Pluginliste leicht übersieht, sollten Sie jede Datei in diesem Verzeichnis dokumentieren. Das Snippet zu XML-RPC ist nur ein Beispiel, ob Sie die Schnittstelle abschalten können, klärt die Anleitung XML-RPC deaktivieren oder einschränken.

Verifizieren: Unter Plugins > Installierte Plugins erscheint ein eigener Filter „Must-Use (1)“ mit Ihrer Datei. Im Labor meldete der Versuch, das Plugin per WP-CLI zu deaktivieren, nur Error: No plugins deactivated., weil sich Must-Use-Plugins auf diesem Weg nicht abschalten lassen.

Schritt 5: Wenn ein Snippet die Website lahmlegt

Ein Aufruf einer nicht vorhandenen Funktion reicht, und WordPress zeigt statt der Website die Meldung „Auf dieser Website ist ein kritischer Fehler aufgetreten.“ Der Server liefert dann den Statuscode 500. Genau das haben wir im Labor mit einem absichtlich fehlerhaften Snippet ausgelöst. Wichtig dabei: php -l fand keinen Fehler, denn die Syntax war korrekt, erst beim Ausführen fehlte die Funktion. Die Syntaxprüfung ersetzt also keinen Test.

WordPress versucht in solchen Fällen, Administratoren per E-Mail einen Link zum Wiederherstellungsmodus zu schicken. Darauf sollten Sie sich nicht verlassen, denn die E-Mail kommt nicht immer an. Mit Dateizugriff haben Sie zwei sichere Wege:

# Eigenes Plugin abschalten, ohne dass WordPress es lädt
wp plugin deactivate firmen-anpassungen --skip-plugins=firmen-anpassungen

# Ohne WP-CLI: Ordner umbenennen, WordPress lädt das Plugin dann nicht mehr
mv wp-content/plugins/firmen-anpassungen wp-content/plugins/firmen-anpassungen.aus

Ohne --skip-plugins lädt WP-CLI das fehlerhafte Plugin mit und bricht mit derselben Fehlermeldung ab. Ein Must-Use-Plugin entfernen Sie, indem Sie die Datei aus dem Verzeichnis mu-plugins verschieben. Mehr zu diesem Fehlerbild steht in der Anleitung zum Wiederherstellungsmodus bei kritischen Fehlern.

Verifizieren: Die Website liefert nach dem Abschalten wieder den Status 200, etwa geprüft mit curl -I https://www.example.de/. Im PHP-Fehlerprotokoll finden Sie die Zeile mit PHP Fatal error, Datei und Zeilennummer des Snippets.

Schritt 6: Alternative ohne Dateizugriff mit Code Snippets

Haben Sie keinen Dateizugriff, bietet das Plugin Code Snippets eine Oberfläche im Adminbereich. Laut Plugin-Seite auf wordpress.org lag Version 3.10.2 zum Testzeitpunkt vor, geprüft bis WordPress 7.1.2, mit mehr als einer Million aktiven Installationen. Nach der Installation erscheint links der Menüpunkt Snippets mit Alle Snippets und Neu hinzufügen. Für jedes Snippet legen Sie fest, ob es überall, nur im Administrationsbereich, nur im Frontend der Website oder nur einmal ausgeführt wird, und speichern es mit „Speichern und aktivieren“. Die deutsche Übersetzung ist an manchen Stellen noch unvollständig, einzelne Beschriftungen erscheinen auf Englisch.

Der Kompromiss ist ehrlich zu benennen. Die Snippets liegen in der Datenbank, nicht in Dateien. Sie tauchen also nicht in einer Versionsverwaltung auf, und jeder Administrator kann darüber PHP-Code ausführen, auch wenn Sie den Datei-Editor von WordPress mit DISALLOW_FILE_EDIT gesperrt haben. Wie Sie die Konstante setzen, zeigt die Anleitung wp-config.php härten. Für den Notfall beschreibt die FAQ des Plugins einen Sicherheitsmodus. Im Labor setzten wir dazu in der wp-config.php folgende Zeile:

define( 'CODE_SNIPPETS_SAFE_MODE', true );

Ein fehlerhaftes Snippet, das vorher den Status 500 auslöste, wurde damit übersprungen und die Website lieferte wieder 200. Danach deaktivieren Sie das Snippet im Adminbereich, korrigieren es und entfernen die Zeile wieder.

Verifizieren: Unter Snippets > Alle Snippets ist Ihr Snippet als aktiv markiert, und seine Wirkung ist auf der Website sichtbar. Die Zeile mit dem Sicherheitsmodus steht nicht mehr in der wp-config.php.

Eigener Code ist Teil der Website und braucht dieselbe Pflege wie jedes Plugin. Nach einem Update von WordPress oder PHP sollten Sie prüfen, ob Ihre Snippets noch funktionieren, und ohne Backup sollten Sie nie etwas ändern. Wer diese Routine nicht selbst im Kalender halten möchte, kann sie abgeben: Die WordPress-Wartung von wordpressupdate.de übernimmt Updates von WordPress, Plugins und Themes mit Kompatibilitätsprüfung und wöchentliche Backups auf externen Speicher.

Typische Fehler

FehlerbildUrsacheLösung
Snippet ist nach einem Theme-Update verschwundenCode stand in der functions.php des Eltern-ThemesIn ein eigenes Plugin oder ein Child-Theme verlagern
„Auf dieser Website ist ein kritischer Fehler aufgetreten.“ mit Status 500Laufzeitfehler im Snippet, etwa eine fehlende FunktionPlugin per --skip-plugins oder Umbenennen abschalten, Fehlerprotokoll lesen
WP-CLI bricht mit demselben kritischen Fehler abWP-CLI lädt das fehlerhafte Plugin mit--skip-plugins=NAME anhängen
Plugin taucht nicht in der Liste aufKopfkommentar fehlt oder Datei liegt zu tief im OrdnerPlugin Name: in die Hauptdatei direkt im Plugin-Ordner
Must-Use-Plugin wird nicht geladenDatei liegt in einem Unterordner von mu-pluginsDatei direkt ablegen oder eine Ladedatei mit require anlegen
„Cannot redeclare“ nach dem Umzug eines SnippetsFunktion steht noch zusätzlich in der functions.phpAlte Kopie entfernen, Funktionsnamen mit eigenem Präfix versehen

Häufige Fragen

Ist ein eigenes Plugin nicht zu viel Aufwand für drei Zeilen Code?

Nein. Die Datei aus Schritt 2 ist in wenigen Minuten angelegt, und Sie sammeln darin alle kleinen Anpassungen der Website. Ein Plugin je Snippet ist nicht nötig. Sinnvoll ist eine Trennung erst, wenn Sie Snippets unabhängig voneinander abschalten wollen.

Kann ich Snippets im Adminbereich unter Theme-Datei-Editor bearbeiten?

Technisch ja, empfehlenswert ist es nicht. Ein Fehler beim Speichern kann Sie aus dem Adminbereich aussperren, und Sie haben keine Kopie des vorherigen Stands. Viele Betreiber sperren den Editor deshalb mit DISALLOW_FILE_EDIT ganz.

Bleibt mein eigenes Plugin bei WordPress-Updates erhalten?

Ja. Updates von WordPress ersetzen die Dateien des Kerns, nicht den Inhalt von wp-content/plugins oder wp-content/mu-plugins. Ob Ihr Code mit einer neuen WordPress- oder PHP-Version noch funktioniert, müssen Sie trotzdem selbst prüfen, am besten auf einer Staging-Umgebung.

Wie sichere ich meine Snippets?

Ein eigenes Plugin oder Must-Use-Plugin steckt in jedem Dateibackup. Snippets aus Code Snippets liegen in der Datenbank und sind nur im Datenbankbackup enthalten.

Testumfang

Wir haben alle Wege auf einer deutschsprachigen Testinstallation mit WordPress 7.1.2 ausprobiert. Selbst ein absichtlich fehlerhaftes Snippet ließ sich wieder abschalten, auch über den Sicherheitsmodus von Code Snippets. Den Wiederherstellungsmodus per E-Mail und Multisite-Installationen haben wir nicht geprüft. Wenn Sie diese Funktionen brauchen, probieren Sie sie zuerst auf einer Kopie Ihrer Website aus.

Fazit

Die functions.php ist der falsche Ort für Funktionen, die nichts mit dem Design zu tun haben. Ein eigenes kleines Plugin kostet wenige Minuten, übersteht Theme-Updates und Theme-Wechsel und lässt sich im Notfall mit einem Befehl abschalten. Must-Use-Plugins bleiben dem Code vorbehalten, der immer laufen muss, und Code Snippets ist ein Kompromiss für Websites ohne Dateizugriff. Wenn Sie Updates und Backups rund um Ihre Anpassungen lieber abgeben, finden Sie bei der WordPress-Wartung von Marcel Schönfelder persönliche Betreuung aus Dresden.

Weiterführende Anleitungen und Quellen

WordPressPHPPluginsfunctions.phpCode Snippets