Kaum eine andere Datei einer WordPress-Installation ist so wichtig wie die wp-config.php und dennoch fristet sie in den meisten Fällen ein Schattendasein. Höchste Zeit, dass wir uns genauer ansehen, was diese zentrale Datei tut, wie sie bearbeitet werden kann und warum sich das Bearbeiten lohnen könnte.

Die Konfigurationsdatei

Neben vielen Einstellungen, die ein Admin-Benutzer in WordPress über das Admin-Interface setzen kann, gibt es eine Reihe von Einstellungen, für die WordPress die wp-config.php zu Rate zieht.Würden wir diese Datei aus einer WordPress-Installation entfernen, müsste diese sofort den Betrieb einstellen. Nach einigen einleitenden Kommentaren enthält die Konfigurationsdatei nämlich gleich am Anfang Zugangsdaten und Einstellungen für die Datenbank, in der WordPress einen Großteil seiner Inhalte ablegt.

Diese Daten werden, zusammen mit ein paar anderen grundlegenden Voreinstellungen, bei der Ersteinrichtung von WordPress in der wp-config.php abgelegt. Wenn eine Website später zu einem anderen Hoster umzieht oder eine Test-Umgebung eingerichtet wird, muss die Konfigurationsdatei in der Regel angepasst werden, um WordPress wieder/weiterhin Zugang zur Datenbank zu geben.

Darüber hinaus gibt es eine ganze Batterie praktischer Ergänzungen, die zur wp-config.php hinzugefügt werden können.

wp-config.php bearbeiten

Zum Bearbeiten der wp-config.php müssen wir uns zunächst per FTP mit dem Server verbinden. Vor irgendwelchen Änderungen an der Datei empfiehlt sich dringend eine Sicherheitskopie, mit der im Zweifelsfall der Originalzustand wiederhergestellt werden kann, falls etwas schief läuft.

Auch wenn die Datei theoretisch eine Ebene weiter nach oben verschoben werden kann, findet sie sich in der Regel im Hauptverzeichnis einer WordPress-Installation, sollte also auf derselben Ebene liegen, wie beispielsweise das wp-content-Verzeichnis.

Bestandsaufnahme

In den allermeisten Fällen sollte die Konfigurationsdatei mit diesen Standard-Werten ausgestattet sein. Beim Einsatz automatischer Installer von Hostern können dort auch zusätzliche Informationen abgelegt worden sein.

Datenbank-Einstellungen

Neben Datenbankname, Datenbankbenutzer, Datenbank-Host und -Passwort, die allesamt in der Regel angepasst werden müssen, wenn die Website auf einen neuen Server umzieht, finden sich hier mit DB_CHARSET auch der Zeichensatz der Datenbank und DB_COLLATE mit Regeln zur Sortierung der Datenbank.

$table_prefix enthält ein Präfix, das zur Benennung der Datenbank-Tabellen genutzt wird, die WordPress anlegt. Dieses Präfix kann nach der Installation geändert werden. In diesem Fall müssen aber auch die Namen der Tabellen geändert werden, sonst verhält sich die bestehende WordPress-Installation plötzlich wie fabrikneu und „vergisst“ zumindest vorübergehend alle Inhalte. Das Ändern des Präfix von wp_ auf eine eigene Zeichenfolge bringt im Übrigen keinen Zugewinn an Sicherheit für die Website, auch wenn sich dieses Gerücht hartnäckig hält.

.wp-block-code {
border: 0;
padding: 0;
}

.wp-block-code > div {
overflow: auto;
}

.shcb-language {
border: 0;
clip: rect(1px, 1px, 1px, 1px);
-webkit-clip-path: inset(50%);
clip-path: inset(50%);
height: 1px;
margin: -1px;
overflow: hidden;
padding: 0;
position: absolute;
width: 1px;
word-wrap: normal;
word-break: normal;
}

.hljs {
box-sizing: border-box;
}

.hljs.shcb-code-table {
display: table;
width: 100%;
}

.hljs.shcb-code-table > .shcb-loc {
color: inherit;
display: table-row;
width: 100%;
}

.hljs.shcb-code-table .shcb-loc > span {
display: table-cell;
}

.wp-block-code code.hljs:not(.shcb-wrap-lines) {
white-space: pre;
}

.wp-block-code code.hljs.shcb-wrap-lines {
white-space: pre-wrap;
}

.hljs.shcb-line-numbers {
border-spacing: 0;
counter-reset: line;
}

.hljs.shcb-line-numbers > .shcb-loc {
counter-increment: line;
}

.hljs.shcb-line-numbers .shcb-loc > span {
padding-left: 0.75em;
}

.hljs.shcb-line-numbers .shcb-loc::before {
border-right: 1px solid #ddd;
content: counter(line);
display: table-cell;
padding: 0 0.75em;
text-align: right;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
white-space: nowrap;
width: 1%;
}
// ** MySQL settings ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'krautpress' );
/** MySQL database username */
define( 'DB_USER', 'krautpress' );
/** MySQL database password */
define( 'DB_PASSWORD', 'as9upQ/JAscdoq2' );
/** MySQL hostname */
define( 'DB_HOST', 'localhost' );
/** Database Charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8mb4' );
/** The Database Collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', '' );
/** WordPress Database Table prefix. */
$table_prefix = 'wp_';
Code-Sprache: PHP (php)

Keys und Salts

Mit einer Reihe bei der Installation zufällig generierter Zeichenketten sichert WordPress zum Beispiel Passwörter und Anmelde-Cookies ab.

Sollten die Keys und Salts aus irgendwelche Gründen leer sein, empfiehlt es sich, neue zu generieren und einzutragen.

Debug-Einstellungen

WP_DEBUG sollte in der Regel auf false gestellt sein, weil sonst Fehler, die beim Seitenaufbau auftreten, direkt ausgegeben würden. Diese Option ist für Entwicklerinnen und Entwickler aber häufig nützlich.

define( 'WP_DEBUG', false );Code-Sprache: JavaScript (javascript)

Fixe Einträge

Die folgenden Verweise auf weitere WordPress-Core-Dateien und den Pfad zur WordPress-Installation sollten nicht verändert werden. Oberhalb dieses Abschnitts können aber eigene Einträge hinzugefügt werden.

Eigene Ergänzungen

Ich würde grundsätzlich in zwei Kategorien von Ergänzungen für die wp-config.php unterscheiden. Auf der einen Seite die Einstellungen, die WordPress bei der Installation nicht automatisch setzt, die aber dennoch vom WordPress-Core zur Nutzung vorgesehen sind.Auf der anderen Seite nutzen Plugins von Zeit zu Zeit PHP-Konstanten, die in die Konfigurationsdatei eingesetzt werden können um das Verhalten des Plugins zu beeinflussen und z.B. Einstellungen fix auf einen bestimmten Wert zu setzen.

Website-URLs

Einer der häufigsten WordPress-Fehler, die ich in den letzten Jahren gesehen habe, wurde durch die Änderung einer einzigen Einstellung im WordPress-Backend ausgelöst.Werden die beiden Werte WP_HOME und WP_SITEURL hingegen über die wp-config.php gesetzt, sind die Optionen im Backend inaktiv und die beiden Werte für die Home-URL und die Website-URL sind dauerhaft festgeschrieben.

/* Custom WordPress URL. */
define( 'WP_SITEURL', 'https://krautpress.de/' );
define( 'WP_HOME', 'https://krautpress.de/' );
Code-Sprache: JavaScript (javascript)

Update-Verhalten

Wie ich vor wenigen Tagen beschrieben habe, kann über WP_AUTO_UPDATE_CORE das Update-Verhalten des WordPress-Core angepasst werden. Neben dem einfachen Deaktivieren von Core-Updates über den Wert false, kleine Versionssprünge mit minor und alle Versionsspürnge mit true sind hier zum Beispiel auch beta und RC Auswahlmöglichkeiten, was vor allem für interessierte Entwicklerinnen und Entwickler hilfreich sein kann.

define( 'WP_AUTO_UPDATE_CORE', true );Code-Sprache: JavaScript (javascript)

Datei-Editor deaktivieren

Für mich gehört eine Änderung an der Konfiguration zu den ersten Amtshandlungen bei jeder WordPress-Installation, die ich in die Finger bekomme: das Deaktivieren des Datei-Editors für Plugins und Themes. Damit unterbinde ich, dass Admin-User Änderungen an Dateien vornehmen können.Damit verhindere ich nicht nur versehentliche Änderungen an diesen Dateien, sondern sichere sie auch gegen mutwillige Bearbeitung ab, die zum Beispiel ein Angreifer vornehmen könnte, der einen Benutzer-Zugang geknackt hat.

define( 'DISALLOW_FILE_EDIT', true );Code-Sprache: JavaScript (javascript)

Revisionen limitieren

Die Anzahl der Speicherstände, die WordPress für den Bearbeitungsverlauf einer Seite oder eines Beitrags aufbewahrt, lässt sich mit WP_POST_REVISIONS entweder durch die Angabe einer Ziffer limitieren oder mit false ganz abschalten, was ich nicht empfehlen würde.

define( 'WP_POST_REVISIONS', 3 );Code-Sprache: JavaScript (javascript)

Multisite

Der Multisite-Modus, in dem aus einer WordPress-Installation gleich mehrere Websites mit unterschiedlichen (Sub-)Domains, Themes und Usern betrieben werden können, wird ebenfalls über die wp-config.php aktiviert.Ist die Konstante WP_ALLOW_MULTISITE gesetzt, wird die weitere Einrichtung der Multisite über das Interface im WordPress-Backend durchgeführt.

define( 'WP_ALLOW_MULTISITE', true );Code-Sprache: JavaScript (javascript)

Auf WordPress.org findet sich eine vollständige Liste der nutzbaren Konstanten für die wp-config.php.