WordPress: Angaben in der wp-config.php

Veröffentlicht am:

9 Kommentare

Die wp-config.php-Datei zählt zu den wichtigsten Dateien in WordPress. Hier werden grundlegende Daten wie zum Beispiel die Verbindung zur Datenbank festgehalten. Darüber hinaus können zusätzliche Einstellungen und Richtlinien vorgenommen werden, die WordPress in vielen Bereichen optimieren.
Vielen Seitenbetreibern ist gar nicht das Potential bewusst, welches sie durch Nicht-Nutzung der wp-config.php verschenken. Deshalb habe ich diesen Artikel geschrieben.

Zwar liegt dem Installationspaket von WordPress auch immer eine wp-config-sample.php Beispieldatei bei, aber dort sind nicht alle potentiellen Einstellungen aufgeführt.

Warnung: Alle Änderungen an der wp-config.php-Datei erfolgen auf eigene Verantwortung. Bei einigen WordPress Plugins und Themes kann es unter Umständen zu Inkompatibilitäten kommen.

wp-config.php Standardeinstellungen

Ohne Verbindung zur Datenbank läuft bei WordPress nichts. Aus diesem Grund steht dieser Anweisungsblock ziemlich weit vorn in der wp-config.php:

Database Name
Hier trägt man den Namen der Datenbank ein

Database Username
Hier trägt man den Datenbank Benutzernamen ein

Database Password
Hier trägt man das Passwort des Benutzers der Datenbank ein

Database Host
Adresse des Datenbankserver.

Beim Host wird meistens localhost eingetragen. Das ist allerdings von eurem Provider abhängig. Abweichungen vom 3306 Standardport werden so eingetragen:

define('DB_HOST', 'localhost:0815');

oder auch so:

define('DB_HOST', 'meindatenbankserver.com:0815');

Arbeitet der Datenbankserver mit Unix Sockets oder Pipes, erfolgt die Notation folgendermaßen:

define('DB_HOST', 'localhost:/var/run/mysqld/mysqld.sock');

Database character set

define('DB_CHARSET', 'utf8');

Mit utf8 liegt ihr meistens immer richtig. Da diese Zeichensatz-Problematik nur Schmerzen verursacht, lasse ich auch die nächste Angabe in der Standardeinstellung.

Database collation

define('DB_COLLATE', '');

Sicherheit

Es lassen sich erstaunlich viele Sicherheitseinstellungen in der wp-config.php vornehmen. Das betrifft nicht nur die Security Keys.

Security Keys

Dieser Bereich wurde seit den 2.x Versionen stetig ausgebaut. Die Keys dienen dazu, die Sicherheit der Daten im Nutzer Cookie zu erhöhen. Es empfiehlt sich, den Onlinegenerator zu benutzen und die Werte einfach zu übernehmen. Es sind aber keine zwingend notwendigen Einträge.

define('AUTH_KEY',         't`DK%X:>xy|e-Z(BXb/f(Ur`8#~UzUQG-^_Cs_GHs5U-&Wb?pgn^p8(2@}IcnCa|');
define('SECURE_AUTH_KEY',  'D&ovlU#|CvJ##uNq}bel+^MFtT&.b9{UvR]g%ixsXhGlRJ7q!h}XWdEC[BOKXssj');
define('LOGGED_IN_KEY',    'MGKi8Br(&{H*~&0s;{k0<S(O:+f#WM+q|npJ-+P;RDKT:~jrmgj#/-,[hOBk!ry^');
define('NONCE_KEY',        'FIsAsXJKL5ZlQo)iD-pt??eUbdc{_Cn<4!d~yqz))&B D?AwK%)+)F2aNwI|siOe');
define('AUTH_SALT',        '7T-!^i!0,w)L#JK@pc2{8XE[DenYI^BVf{L:jvF,hf}zBf883td6D;Vcy8,S)-&G');
define('SECURE_AUTH_SALT', 'I6`V|mDZq21-J|ihb u^q0F }F_NUcy`l,=obGtq*p#Ybe4a31R,r=|n#=]@]c #');
define('LOGGED_IN_SALT',   'w<$4c$Hmd%/*]`Oom>(hdXW|0M=X={we6;Mpvtg+V.o<$|#_}qG(GaVDEsn,~*4i');
define('NONCE_SALT',       'a|#h{c5|P &xWs4IZ20c2&%4!c(/uG}W:mAvy<I44`jAbup]t=]V<`}.py(wTP%%');

Plugin und Theme Editor deaktivieren

Ich kann mich nicht mehr an den genauen Zeitpunkt oder die Version erinnern, als es Nutzern gestattet war, den Quellcode von Themes oder Plugins zu verändern. Gut finde ich das bis heute nicht und die Mehrheit der Nutzer weiß auch gar nicht, was sie da tut. Mit diesem Befehl schaltet man diese Möglichkeit ab:

define('DISALLOW_FILE_EDIT', true);

Installation und Updates von Themes und Plugins

Möchte man den Nutzern auf dem System das Installieren und Updaten von Themes und/oder Plugins untersagen, setzt man diese Option:

define('DISALLOW_FILE_MODS', true);

Ist DISALLOW_FILE_MODS gesetzt, ist DISALLOW_FILE_EDIT nicht mehr nötig.

SSL Verbindungen erzwingen

Um die Anmeldung für Nutzer und des Adminbereiches über eine SSL verschlüsselte Verbindung zu erzwingen, stehen die zwei Angaben zur Verfügung:

define('FORCE_SSL_LOGIN', true);
define('FORCE_SSL_ADMIN', true);

Auf Nummer Sicher geht man mit der FORCE_SSL_ADMIN Option.

Externe URL Requests blockieren

Welcher Server darf Anfragen an das WordPress System stellen? Bzw. welcher nicht? Setzt man die folgende Einstellung auf true, darf nur localhost Requests an WordPress richten:

define('WP_HTTP_BLOCK_EXTERNAL', true);

Möchte man dennoch Anfragen bestimmter Server oder Dienste durchlassen, muss man den (oder die) Server explizit auflisten:

define('WP_ACCESSIBLE_HOSTS', 'api.wordpress.org,*.externerserver.de');

Sind es mehrere Server, so werden sie durch Kommata getrennt hintereinander weggeschrieben. Alle Subdomains können durch die * Angabe eingeschlossen werden. IP Adressen müssten auch funktionieren.

Table Prefix

$table_prefix = 'thx1138';

Standardmäßig erhalten die Tabellennamen einer WordPress-Installation das Präfix wp_. Möchte man einen anderen Namensvorsatz vergeben (zum Beispiel aus Sicherheitsgründen), stellt man das mittels dieser Angabe ein. Es sind nur Zahlen, Buchstaben und der Unterstrich erlaubt.

WP SITEURL

Diese Angabe legt fest, wo die Kerndateien einer WordPress Installation zu finden sind. Eventuell anderslautende Einträge im Backend bzw. in der options Tabelle werden hiervon überschrieben. Bei dieser Angabe darf kein Slash am Ende der URL stehen:

define('WP_SITEURL', 'https://beispiel.de/meinwordpressverzeichnis');

Es ist auch möglich, den Servernamen als Bestandteil der URL dynamisch ausgeben zu lassen:

define('WP_SITEURL', 'https://' . $_SERVER['HTTP_HOST'] . '/pfadzuwordpress');

Da man dort aber ein Sicherheitsrisiko sieht, wird diese statische Methode empfohlen:

define('WP_SITEURL', 'https://' . $_SERVER['SERVER_NAME'] . '/pfadzuwordpress');

WP Home

Welche URL müssen die Nutzer eintippen, um auf den Blog zu gelangen? Der Eintrag WP_Home legt dies fest und überschreibt auch hier wieder den eigentlichen Wert in der wp_options Tabelle. Wieder darf kein Slash am Ende der URL stehen und dynamische Werte sind auch möglich:

define('WP_HOME', 'https://beispielseite.de/wordpressverzeichnis');

Gebraucht wird diese Option vor allem, wenn WordPress in einem Unterverzeichnis einer Domain liegt, aber dennoch über die Domain URL aufgerufen werden soll.

WP Content verschieben

Seit WordPress 2.6 kann man den gesamten WP Content Ordner verschieben. WordPress sucht die Plugins, Uploads und Themes am angegebenen Ort:

define('WP_CONTENT_DIR', dirname(__FILE__) . '/andererordner/wp-content');

Und dann, wie die URI dafür lautet:

define('WP_CONTENT_URL', 'https://beispielseite/anderesverzeichnis/wp-content');

Das geht natürlich auch nur mit dem Plugin Ordner:

define('WP_PLUGIN_DIR', dirname(__FILE__) . '/anderesverzeichnis/wp-content/plugins');
define('WP_PLUGIN_URL', 'https://example/anderesverzeichnis/wp-content/plugins');

Der Themes Ordner hingegen ist fest verdrahtet, wie hier ersichtlich wird:

$theme_root = WP_CONTENT_DIR . '/themes';

Der Pfad zum Uploads Ordner wird hier festgelegt:

define('UPLOADS', '/blog/wp-content/uploads');

Den Upload aller Dateitypen zulassen

Das klingt verlockend, öffnet aber meiner Ansicht nach den Tentakelwesen aus der Kerkerdimension Tür und Tor:

define('ALLOW_UNFILTERED_UPLOADS', true);

Autosave Interval

define('AUTOSAVE_INTERVAL', 300);

Standardmäßig speichert WordPress alle 60 Sekunden den aktuellen Stand eines gerade zu bearbeitenden Artikels als Revision ab. In meinem Beispiel habe ich den Wert mal auf 5 Minuten gesetzt. Die Angabe hat immer in Sekunden zu erfolgen.

Wie man sieht, kann diese Funktion dafür sorgen, dass eure Revisions schnell anwachsen und die Datenbank immer größer wird. Dagegen kann man aber etwas tun:

Revisionen

Post Revisions

Entweder, ihr schaltet die Revisions Funktion ganz ab:

define('WP_POST_REVISIONS', false);

Oder beschränkt diese auf die letzten x (ich finde, 5 ist ein guter Wert) Versionen:

define('WP_POST_REVISIONS', 5);

Cookie Domain

So setzt man eine spezielle Cookie Domain für WordPress:

define('COOKIE_DOMAIN', 'www.askapache.com');

Debugging

Die Debugging Funktion in WordPress ist standardmäßig abgeschaltet. Wer Fehler in der Installation auswerten möchte, muss das Debuging aktivieren:

define('WP_DEBUG', true);

Dann sind auch WP_DEBUG_DISPLAY und WP_DEBUG_LOG möglich.

Ich halte es persönlich nicht für sinnvoll, in den Javascript bzw. CSS Dateien vom WordPress Kernsystem zu arbeiten. Aber wer das tun möchte, sollte folgende Einstellung setzen:

define('SCRIPT_DEBUG', true);

Javascript Concatenation

Damit das Arbeiten für den Admin schneller geht, fasst WordPress die Javascript Dateien zusammen und liefert diese gebündelt aus. Sollte dies unerwarteterweise Probleme bereiten, schaltet man dieses Verhalten ab:

define('CONCATENATE_SCRIPTS', false);

PHP Memory Limit

Je nach Provider und Hostingumgebung kann der PHP Arbeitsspeicher erhöht werden, den WordPress belegen kann, bevor der Webserver aussteigt. Mittlerweile sind die 32 MB oder 64 MB für ein voll ausgestattetes WordPress viel zu wenig. Dann kann man den Speicher mit dieser Angabe erhöhen:

define('WP_MEMORY_LIMIT', '128M');

Die folgene Angabe wirkt sich extra auf den Adminbereich aus:

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

WP Cache

Viele Cache Plugins benötigen diesen Eintrag:

define('WP_CACHE', true);

CustomUser Table und Custom User Meta Table

Man kann auch eigene Tabellen für die WordPress Nutzer verwenden. Ich weiss allerdings nicht, ob das ergänzend zu den Standardtabellen geschieht oder diese dadurch inaktiv sind:

define('CUSTOM_USER_TABLE', $table_prefix.'my_users');
define('CUSTOM_USER_META_TABLE', $table_prefix.'my_usermeta');

WP Language

Diese Angabe ist seit WordPress Version 6.x (?) veraltet und wird nicht mehr berücksichtigt.
Diese Optionen teilen dem System mit, wo sich das Verzeichnis mit den Übersetzungsdateien befindet und wie diese benannt sind:

define('WPLANG', 'de_DE');
define('WP_LANG_DIR', dirname(__FILE__) . 'wordpress/languages');

Save Queries

Manchmal ist es hilfreich zu analysieren, welche Datenbankabfragen das System generiert. Die folgende Variable speichert alle Anfragen (aufgerufene Funktion, Zeitdauer etc.) in einem Array und sollte daher nur während des Debugging aktiv sein:

define('SAVEQUERIES', true);

File Permissions

Hat der Webhoster strikte Regeln bei den Datei/Verzeichnisberechtigungen erlassen, ist das automatische Einspielen von Updates nicht mehr möglich ist. Mit dieser Einstellung kann man sich behelfen, aber ich halte wenig davon. Der Webhoster wird schon wissen, weshalb er dieses Setup gewählt hat. Nichtsdestotrotz hier die Befehle zum Aushebeln dieses Sicherheitsfeatures:

define('FS_CHMOD_DIR', ( 0755 & ~ umask() ));
define('FS_CHMOD_FILE', ( 0644 & ~ umask() ));

WordPress Upgrade

So ein Update auf Knopfdruck ist super komfortabel, aber eben auch nicht wirklich ein Ausweis einer strikten Sicherheitsarchitektur. Wer auf Serverumgebungen mit getrennten Webserver- und FTP-Usern Updates einspielen will, ohne jedesmal die FTP Zugangsdaten eingeben zu müssen – kann es mit diesen erweiterten Einträgen für die wp-config.php versuchen:

define('FS_METHOD', 'ftpext');
define('FTP_BASE', '/pfadzuwordpress/');
define('FTP_CONTENT_DIR', '/pfadzuwordpress/wp-content/');
define('FTP_PLUGIN_DIR ', '/pfadzuwordpress/wp-content/plugins/');
define('FTP_PUBKEY', '/home/username/.ssh/id_rsa.pub');
define('FTP_PRIKEY', '/home/username/.ssh/id_rsa');
define('FTP_USER', 'username');
define('FTP_PASS', 'password');
define('FTP_HOST', 'ftp.beispielseite.de');
define('FTP_SSL', false);

WP Cron Jobs

Cron Jobs sind eine feine Sache und in WordPress teilweise auch zu steuern. Wenn z.B. der normale Cron-Job bei den geplanten Artikelveröffentlichungen seine Arbeit einstellt, kann man den alternativen Dienst aktivieren:

define('ALTERNATE_WP_CRON', true);

Die Cron-Jobs deaktiviert man so:

define('DISABLE_WP_CRON', true);

Jeder Crob-Job kann nur einmal in einem bestimmten Zeitraum (in Sekunden anzugeben) angestossen werden:

define('WP_CRON_LOCK_TIMEOUT', 120);

Papierkorb / Trash

Empty Trash

Der WordPress eigene Papierkorb (Trash) speichert alle gelöschten Beiträge, Seiten, Artikelbilder und Kommentare so lange, bis man den Papierkorb expliziert leert. Allerdings gibt es dafür auch einen Automatismus. Die Angabe erfolgt in Tagen:

define('EMPTY_TRASH_DAYS', 7);

Mit der Angabe 0 kann man den Papierkorb ganz abschalten. Dann wird beim Löschen gleich richtig gelöscht. Weg ist dann weg.

define('EMPTY_TRASH_DAYS', 0);

Selbst mir war die Papierkorb-Funktion nur für die Mediathek unbekannt:

define('MEDIA_TRASH', true);

Database Optimization

define('WP_ALLOW_REPAIR', true);

Wenn ich das richtig verstanden habe, setzt man diese Funktion auf true, wenn man sich im Falle einer verhauenen Datenbank nicht mehr in das System selbst einloggen kann. Dabei wird die Funktion nur aktiviert, während der Aufruf des Skriptes händisch erfolgen muss:

{deinewordpressseite}/wp-admin/maint/repair.php

Upgrades bei globalen Tabellen

Es gibt Fälle, da sind die globalen Tabellen so angewachsen (User und Usermeta), dass ein Upgrade auf diese Tabellen zu lange dauert und eventuell sogar abbricht. Um das zu verhindern, kann man diese Tabellen von Änderungs- oder Löschungs-Anfragen ausnehmen:

define('DO_NOT_UPGRADE_GLOBAL_TABLES', true);

Automatisches Update der Kerndateien einstellen

Man kann auch die Kerndateien vom automatischen Update ausschliessen.

define('WP_AUTO_UPDATE_CORE', false);

Der Wert true würde ein automatisches Updaten erlauben.

Interessant ist auch die Idee, nur Minor Updates zuzulassen:

define('WP_AUTO_UPDATE_CORE', 'minor');

Hiermit setzt ihr die automatische Update Funktion aus:

define('AUTOMATIC_UPDATER_DISABLED', true);

Wenn ihr nur die Themes und Plugins vom automatischen Update ausnehmen wollt, definiert das so:

define('CORE_UPGRADE_SKIP_NEW_BUNDLED', true);

Verbindung zur wordpress.com API

Den API-Key eines Accounts bei wordpress.com kann man auch in der wp-config.php hinterlegen. Der einzige, mir bekannte, Fall wo das gebraucht wird, liegt in der Verwendung der Jetpack-Pluginsammlung:

define('WPCOM_API_KEY', 'API-Key-Eingeben');

Fazit

Wie ihr seht, bietet einem die wp-config.php Datei vielseitige Einstellungsmöglichkeiten für das WordPress System, die über den Grundzustand weit hinausgehen. Manche Anweisungen wird man häufiger einsetzen, manche eher selten und einige gar nicht. Der Vorteil bei dieser Methode zu Fuß liegt in der Einsparung von Plugins (die auch nur dieselben Befehle injizieren würden) und im Lerneffekt beim Benutzer. Und dabei habe ich hier auch nur die WordPress-eigenen Befehle vorgestellt.

Bitte beachten Sie: die Informationen in diesem Artikel wurden zum Zeitpunkt seiner Erstellung nach bestem Wissen und Gewissen zusammengetragen, aufbereit und niedergeschrieben.
Diese können heute, abhängig vom Zeitpunkt der Veröffentlichung und des behandelnden Themas, überholt und ungültig sein.
Es obliegt den Lesern, diese Inhalte mit dem aktuellen Wissensstand abzugleichen.

Artikel online seit: 10 Jahren 11 Monaten
Letzte Änderung: 29.03.2023

9 Gedanken zu „WordPress: Angaben in der wp-config.php“

  1. Hallo,
    vielen Dank für den tollen Artikel! Da sind einige nützliche Sachen dabei 🙂
    Eine Frage habe ich noch – ich habe meine config Datei inzwischen bearbeitet und einige Infos hinterlegt. (WP SITEURL und WO home). Nach einem automatisch Update von wordpress sind diese Infos jedesmal weg. Meine Seite nicht mehr erreichbar. Gibt es eine Möglichkeit, die config Datei vom Update auszuschließen??
    LG Jule

    • Hallo Jule,

      ein WordPress Update betrifft nicht die wp-config.php. Die kennt WordPress gar nicht, im Gegensatz zur wp-config-sample.

      Die Angaben der Siteurl und Home in der wp-config.php sind auch nur Notfallmaßnahmen. Es reicht im Prinzip aus, dies im Backend bei den Einstellungen anzugeben.

      • Hallo,

        da hatte ich leider einmal was falsch angegeben. Jetzt ist es ausgegraut und ich muss es in der wp-config angeben… Oder gibt es hier noch eine andere Möglichkeit?
        Komisch – beim letzten update, hat es mir diese Erweiterung rausgenommen. Dann kann ich nur hoffen, dass es diesmal klappt. Ich kann u.U. nämlich nicht reagieren, da ich im Urlaub bin.
        Herzlichen Dank! Jule

      • Ja, Du könntest es direkt in der wp_options Tabelle der Datenbank ändern.
        Aber scheinbar ist bei der gesamten Installation etwas im Argen, wenn da schon die Backendeinstellungen ausgegraut werden.

      • Ja – ist etwas komplizert bei mir – und ich kenne mich dann doch zu wenig aus.
        Danke trotzdem. Ich werde mal abwarten, was sich tut und hoffen, dass alles gut geht 🙂
        Liebe Grüße
        Juliane

      • „Ja – ist etwas komplizert bei mir“

        Scheint so.

        🙂

        Wenn Du Hilfe benötigst, melde Dich einfach.
        Von hier aus ist es schwer zu sagen, was auf der Seite genau querhaut. Also, so ohne Glaskugel …

  2. Hallo Lars,

    danke für die Bereitstellung deiner Tipp und Tricks, ohne so Leute wie dich, wären wir hier total aufgeschmissen.
    Ich möchte dich gerne um deine Hilfe bitten.
    Nach der Installation von Seo Yoast ist einiges bei mir schief gelaufen und nun erhalte ich folgende PHP Warnung:

    wp-content/wp-cache-config.php): failed to open stream: No such file or directory in /www/htdocs/wp-content/plugins/wp-super-cache/wp-cache-phase1.php on line 7
    wp-cache-config.php‘ for inclusion (include_path=‘.:/usr/share/php:..‘) in /www/htdocs/wp-content/plugins/wp-super-cache/wp-cache-phase1.php on line 7
    trim() expects parameter 1 to be string, array given in /www/htdocs/wp-includes/class-wp-query.php on line 783
    trim() expects parameter 1 to be string, array given in /www/htdocs/de/wp-includes/class-wp-query.php on line 783

    Leider finde ich unter wp/content und wp-content/plugins, kein Ordner mit wp-cache oder wp-super cache. Ich fürchte, den habe ich gelöscht, sonst wäre er doch da.
    Meinen besten Dank für deine Bemühungen.
    Freue mich von dir zu lesen.

    Mit freundlichen Grüßen

    • Hallo Scharlotte,

      Irgendwann musst Du mal WP Super Cache auf Deiner WordPress Webseite installiert gehabt haben, sonst würde jetzt der Fehler nicht kommen. Vielleicht wieder abgeschaltet aber nicht vollständig entfernt?
      Ansonsten kann so eine Meldung noch so einige Ursachen haben, angefangen von einer unvollständigen WordPress/Plugin/Theme Installation über veraltete PHP Version bis hin zur ungenügenden Rechtevergabe auf Verzeichnis-/Datei-Ebene.
      Aus dem Stehgreif kann ich dazu nichts sagen, weil die Glaskugel gerade in der Reinigung ist 🙂
      Wenn Du mich da aber engagieren möchtest, nur zu -> auf Kontakt und fertig.

  3. Hallo,

    ich frag mal ganz ganz naiv:

    Wo genau kommen denn die ganzen gewünschten zusätzlichen Konstanten in der bestehenden config meiner Multisite-Installation hin? Aktuell habe ich drei Blöcke mit define drin: 1. MySQl-Einstellungen 2. Sicherheitsschlüssel 3. Multisite define´s.. und den Abspann.

    Brauch ich irgendwelchen Trenn-Code oder -Text?

    Vielleicht kann man mir mal eine Muster-Config, welche neben den Standardeinstellungen, z.B. jeweils um eine Erweiterung eines jeden obigen Unterthemas ergänzt wurde, zusenden.

    Danke
    Brieden

Kommentare sind geschlossen.