wp-config.php für Live-Sites: Was wirklich rein muss

Die wp-config.php ist eine der Dateien, die man einmal anlegt und dann jahrelang nicht anfasst. Deshalb schleichen sich dort Fehler ein, die kaum auffallen – aber im Hintergrund trotzdem für Unordnung sorgen.

Ich habe mir meine Standardversion zuletzt nochmal vorgenommen und ein paar Sachen bereinigt.

Debug – alles auf false auf Live

Das klingt offensichtlich, aber ich sehe regelmäßig Configs, bei denen WP_DEBUG_LOG auf true steht, während WP_DEBUG deaktiviert ist. Seit WordPress 5.1 greift das technisch zwar, aber es ist ein Hinweis darauf, dass die Datei nie systematisch aufgeräumt wurde.

Auf Live-Sites gehört alles auf false:

define( 'WP_DEBUG', false );
define( 'WP_DEBUG_DISPLAY', false );
define( 'WP_DEBUG_LOG', false );
define( 'WP_DISABLE_FATAL_ERROR_HANDLER', false );
define( 'SCRIPT_DEBUG', false );
define( 'SAVEQUERIES', false );
@ini_set( 'display_errors', 0 );

Das @ini_set am Ende ist kein Luxus – auf manchen Hostern greift WP_DEBUG_DISPLAY false allein nicht zuverlässig.

Memory – Frontend und Backend separat

WP_MEMORY_LIMIT gilt fürs Frontend. Der WordPress-Admin zieht seinen eigenen Wert aus WP_MAX_MEMORY_LIMIT. Wer den nicht setzt, überlässt dem Hoster die Entscheidung – und das sind manchmal 128M, was bei größeren Importen oder Bildoperationen knapp werden kann.

define( 'WP_MEMORY_LIMIT', '256M' );
define( 'WP_MAX_MEMORY_LIMIT', '512M' );

Post Revisions – 50 ist zu viel

WordPress legt standardmäßig unbegrenzt Revisionen an. Viele Configs begrenzen das auf 50. Das ist besser als nichts, aber auf einer Site mit 300 Posts und aktiver Redaktion wächst die wp_posts-Tabelle trotzdem schnell auf sinnlose Größen an.

5 Revisionen reichen für fast jeden realen Anwendungsfall:

define( 'WP_POST_REVISIONS', 5 );

Autosave und Papierkorb

Zwei Stellschrauben, die kaum jemand anfasst, obwohl sie die Datenbank direkt betreffen:

define( 'AUTOSAVE_INTERVAL', 120 ); // default: 60 Sekunden
define( 'EMPTY_TRASH_DAYS', 14 );   // default: 30 Tage

Alle 60 Sekunden einen Autosave wegschreiben ist für die meisten Redakteure übertrieben. 120 Sekunden sind praxistauglich und halb so viele unnötige DB-Writes. Den Papierkorb nach 14 statt 30 Tagen zu leeren hält die Datenbank sauberer.

Updates – minor ist der richtige Kompromiss

true für alle Updates ist mir auf Produktiv-Sites zu riskant. false bedeutet, Security-Patches nicht automatisch einzuspielen – das ist auch keine Lösung. minor ist der Mittelweg: Patch-Level-Updates laufen durch, Major-Versionen nicht.

define( 'WP_AUTO_UPDATE_CORE', 'minor' );

SSL und Editor

FORCE_SSL_ADMIN fehlt erstaunlich oft. Ohne die Konstante läuft der Admin-Bereich unter Umständen auch über HTTP, wenn die Site nicht sauber auf HTTPS-only konfiguriert ist.

DISALLOW_FILE_EDIT sperrt den Template-Editor im Admin – auf Live-Sites immer sinnvoll. FS_METHOD direct verhindert den FTP-Passwort-Prompt beim Plugin-Update, funktioniert aber nur wenn die Dateiberechtigungen stimmen.


define( 'FORCE_SSL_ADMIN', true );
define( 'DISALLOW_FILE_EDIT', true );
define( 'DISALLOW_FILE_MODS', false );
define( 'FS_METHOD', 'direct' );

Was ich rausgeworfen habe

In meiner alten Config stand define( 'WP_EMOICONS', false ); – falsch geschrieben, hatte null Wirkung. WordPress-Emojis deaktiviere ich ohnehin per Hook in der functions.php, nicht hier.

Außerdem drei auskommentierte WP_AUTO_UPDATE_CORE-Varianten. Solche Kommentar-Friedhöfe entstehen, wenn man sich nicht entscheiden kann. Ich hab mich entschieden.

Die vollständige Config zum Kopieren

Das ist der Block, den ich in meinen Live-Projekten nutze. DB-Zugangsdaten, Auth-Keys und Table-Prefix kommen davor, dieser Block ersetzt nur den Konfigurationsteil:

/* Debug */
define( 'WP_DEBUG', false );
define( 'WP_DEBUG_DISPLAY', false );
define( 'WP_DEBUG_LOG', false );
define( 'WP_DISABLE_FATAL_ERROR_HANDLER', false );
define( 'SCRIPT_DEBUG', false );
define( 'SAVEQUERIES', false );
@ini_set( 'display_errors', 0 );

/* Memory */
define( 'WP_MEMORY_LIMIT', '256M' );
define( 'WP_MAX_MEMORY_LIMIT', '512M' );

/* Revisions */
define( 'WP_POST_REVISIONS', 5 );

/* Autosave & Trash */
define( 'AUTOSAVE_INTERVAL', 120 );
define( 'EMPTY_TRASH_DAYS', 14 );

/* Updates */
define( 'WP_AUTO_UPDATE_CORE', 'minor' );

/* Security */
define( 'FORCE_SSL_ADMIN', true );

/* Editor & Filesystem */
define( 'DISALLOW_FILE_EDIT', true );
define( 'DISALLOW_FILE_MODS', false );
define( 'FS_METHOD', 'direct' );