Zunächst muss man hierfür wissen, dass WordPress für viele Einstellungen auch sogenannte Konstanten anbietet. Dies sind nichts anderes als im Quellcode festgelegte Werte. Diese kann man nutzen um Einstellungen innerhalb von WordPress zu überschreiben. Somit ergibt sich die Möglichkeit einiges an Datenbankabfragen einzusparen und WordPress wieder etwas Performance zu verleihen. Quasi der versteckte Turbo in der wp-config.php, denn hier kann man diese Konstanten sinnvoll nutzen.

Home und Site-URL

Diese Einstellung findet sich im Dashboard unter „Einstellungen –> Allgemein„. Hier trägt man die URLs für die WordPress-Adresse und die Blog-Adresse ein. Diese werden danach in der Datenbank gespeichert und bei jedem Seitenaufbau abgefragt. Muss so nicht sein, geht schneller. Dazu muss man allerdings wissen, ob WordPress selbst in einem Unterverzeichnis liegt oder direkt im Serverroot.

Liegt WordPress im Servreroot, sieht die Definition wie folgt aus:

1
2
define('WP_HOME', 'http://'.$_SERVER['HTTP_HOST']); // Blog-Adresse (URL)
define('WP_SITEURL', 'http://'.$_SERVER['HTTP_HOST']); // WordPress-Adresse (URL)

Liegt WordPress in einem Unterverzeichnis, dann so:

1
2
define('WP_HOME', 'http://'.$_SERVER['HTTP_HOST'] . '/pfad/zu/wordpress'); // Blog-Adresse (URL)
define('WP_SITEURL', 'http://'.$_SERVER['HTTP_HOST'] . '/pfad/zu/wordpress'); // WordPress-Adresse (URL)

Nun weiß WordPress genau unter welcher URL es erreichbar ist und muss nicht jedes Mal die Datenbank deswegen fragen.

Standardpfade

Für vieles werden bei WordPress Pfadangaben benötigt. Unter anderem für das Theme, Plugins, Medien und so weiter. Auch diese sind in der Datenbank hinterlegt und somit wird diese jedes Mal abgefragt, wenn ein Pfad benötigt wird.

1
2
3
4
5
6
define('TEMPLATEPATH', $_SERVER['DOCUMENT_ROOT'] . '/wp-content/themes/euer-theme'); // absoluter Templatepfad zum aktiven Theme (kein abschließender Slash)
define('STYLESHEETPATH', $_SERVER['DOCUMENT_ROOT'] . '/wp-content/themes/euer-theme'); // absoluter Stylesheetpfad des aktiven Themes (kein abschließender Slash)
define('WP_CONTENT_DIR', $_SERVER['DOCUMENT_ROOT'] . '/wp-content');  // absoluter Pfad zum wp-cntent (kein abschließender Slash)
define('WP_CONTENT_URL', 'http://eure-domain.de/wp-content'); // Komplette URL zum wp-content (no trailing slash)
define('WP_PLUGIN_DIR', $_SERVER['DOCUMENT_ROOT'] . '/wp-content/plugins'); // fabsoluter Pfad zum Pluginverzeichnis(kein abschließender Slash)
define('WP_PLUGIN_URL', 'http://eure-domain.de/wp-content/plugins'); // Komplette URL zum Pluginverzeichnis (kein abschließender Slash)

Auch hier muss natürlich wieder darauf geachtet werden, ob WordPress sich direkt im Serverroot befindet oder in einem Unterverzeichnis. Die Variable $_SERVER[‚DOCUMENT_ROOT‘] gibt, wie der Name schon sagt lediglich den Pfad zum Serverroot an. Liegt eure WordPress-Installation in einem Unterverzeichnis, muss dieses noch mit angegeben werden. Dies gilt natürlich auch für die URL selbst.

Mobile-Themes

Wenn im Blog Plugins installiert sind, welche Mobile-Themes erstellen, so sollte man auf die Definition von TEMPLATEPATH und STYLESHEETPATH verzichten. Diese können die Anzeige des Mobile-Themes auf mobilen Endgeräten beträchtlich beeinflussen.

Fazit

Durch diese Angaben wird die Datenbank erheblich entlastet und die Seite selbst wird schneller, da Datenbankabfragen in der Regel länger dauern, als wenn das System einfach nur auf vordefinierte Werte zurückgreifen kann.

Kleiner Eingriff mit großer Wirkung also :-)

25 Meinungen zu “WordPress: Tuning der wp-config.php – Teil 1 – Datenbank entlasten

  1. Mal ne dumme Frage: Ist die wp-config.php unter Umständen auch von Updates betroffen? Eigentlich nie oder?

    Home und Site URL und den Punkt mit den Standardpfaden habe ich gleich mal angewandt.
    Funktioniert perfekt, vielen Dank!

  2. Ich will ja kein Spaßverderber sein, aber hast du es bei dir ausprobiert und die Anzahl der Queries gemessen? Ich würde glatt behaupten, dass diese Definitionen in der Config nichts bringen. Zudem würdest du PHP-Fehler bekommen, weil solche Konstanten wie STYLESHEETPATH oder die zu dem Template später im Core ohne Abfrage noch mal definiert werden (und das tust du ja bereits).

    Ein Blick in die Datei default-constants.php verrät so einige Sachen ;)

      • Schau dir den Code der besagten Datei an. Da entsteht ein Konflikt, zu 100%, weil du bereits Konstanten definierst, die WP Core später selbst definieren will. Das darfst du so nicht machen.

        Und wenn du mir nicht glaubst, dann stell Debug auf true, ich habe das Warning vor meinen Augen.

      • Holla,

        Es gibt kein Warning, das wird ne Notice.
        Da stösst mir ein schief gelaufenes include von nem andern Plugin schon wesentlich unangenehmer auf. Was ich noch viel interessanter finde ist, dass in der default-constants.php wirklich alles geprüft wird, nur diese beiden nicht. Auch die Tastsache das ich es, so wie oben beschrieben, gerade im Codex gefunden habe unter „editing wp-config.php“.

        Wie dem auch sei, ich möchte hier keine Diskussionen über Konventionen oder dergleichen vom Zaun brechen. Es ist richtig, das die Definition über die wp-config.php eine Notice erzeugt, welche jedoch den Ablauf von WP nicht beeinträchtigt. Auch steht ausser Frage, dass die wp-config vor der default-constants geladen wird, und somit die Ausführung von mehreren Funktionen und Datenbankabfragen in der theme.php eingespart wird.

        Dein Hinweis zu Deinen Bedenken steht nun hier und somit kann letztlich jeder selbst entscheiden.

      • Es ist richtig, das die Definition über die wp-config.php eine Notice erzeugt, welche jedoch den Ablauf von WP nicht beeinträchtigt

        Huch, so darf kein Programmierer denken. Man darf keine Fehler machen, um etwas zu gewinnen. Dafür ist der Preis zu hoch.

        Aber du hast Recht, jeder entscheidet selbst. Ich habe nur auf die Fehler hingewiesen. Mein Part ist getan.

  3. Vielen Dank für den Post! Ich ärgere mich schon eine Weile für die manchmal doch recht lahme Performance. Ich hoffe, hier noch das ein oder andere mehr zu lernen. :-)
    Gruß

  4. Danke für diesen ersten Teil der wohl offenbar mehrteiligen Reihe. Die Performance von WordPress ist ja immer wieder ein Thema. Endlich hat dieses mal jemand aufgegriffen und nicht nur an der Oberfläche gekratzt.

    Interessant wäre in diesem Zusammenhang auch der Einsatz von Cache-Plugins. Hab zwar selbst noch keines ausprobiert. Viele sind jedoch der Meinung, dass es nicht viel bringt.

    Außerdem kommen ja immer wieder Diskussionen auf, ob WordPress ein Memory Limit von 64, 128 oder gar 256 MB benötigt. Letzteres wir einem wohl kein Shared Hoster anbieten.

    Wie dem auch sei… Ich warte einfach mal die nächsten Artikel zu diesen Thema ab ;-)

  5. Als ich den Beitrag las, wurde ich sofort neugierig, da meine Performance recht träge war. Also einfach mal ausprobiert und siehe da, es funktioniert prächtig. Seite lädt so schnell, das nicht mal der Ladebalken in der Statusleiste mitkommt ;-)
    Die 2 Zeilen wegen Mobile-Themes habe ich raus gelassen, da ich ein solches Plugin nutze.

    Danke für den Tipp, habe ihn in meinem Blog weiter gegeben.

    • Wie hast du es denn eingetragen? Beispiellinks.

      Bei mir funktioniert es ohne Probleme, hatte aber beim ersten versuch auch einen Bug, da ich Blog Adresse und WordPress Adresse vertauscht hatte ;)

  6. define(‚WP_HOME‘, ‚http://‘.$_SERVER[‚HTTP_HOST‘] . ‚http://blog.mso-hi.de‘); // Blog-Adresse (URL)
    define(‚WP_SITEURL‘, ‚http://‘.$_SERVER[‚HTTP_HOST‘] . ‚http://blog.mso-hi.de‘); // WordPress-Adresse (URL)

    so habe ich es eingebunden bzw. das war mein letzter versuch. mein blog verzeichniss ist ja „root“/blog

    • Kann leider so auch nicht funktionieren, denn http:// usw wird ja schon hier definiert: http://‘.$_SERVER[‚HTTP_HOST‘]

      Meine Blogadresse ist http://saitensprunk.de und mein WordPress liegt in http://saitensprunk.de/site.
      Dann sieht das ganze so aus:

      1
      2
      define('WP_HOME',  'http://'.$_SERVER['HTTP_HOST'] . ''); //  Blog-Adresse (URL)
      define('WP_SITEURL', 'http://'.$_SERVER['HTTP_HOST'] . '/site'); //  WordPress-Adresse (URL)

      Gruß,
      Martin

  7. danke, das funktioniert.
    was ist dann mit der zeile:

    define(‚WP_SITEURL‘, ‚http://‘.$_SERVER[‚HTTP_HOST‘] . ‚/site‘); // WordPress-Adresse (URL)

    benötige ich die dann nicht mehr?

    • Schau mal hier:
      Dashboard unter Einstellungen -> Allgemein
      Blog-Adresse (URL)
      WordPress-Adresse (URL)

      Wie Peter es schon schrieb, da hast du genau diese Einstellungen schon einmal vorgenommen und genau so muss es auch in der wp-config.php sein.

      [EDIT: H.-Peter Pfeufer]
      Ich habe mir mal erlaubt den Link zu entfernen, da dieser nur für eine Person funktionieren würde.
      [/EDIT]

  8. Ich habe folgende 2 Zeilen eingebaut:

    1
    2
    define('WP_HOME', 'http://'.$_SERVER['HTTP_HOST']); // Blog-Adresse (URL)
    define('WP_SITEURL', 'http://'.$_SERVER['HTTP_HOST']); // WordPress-Adresse (URL)

    Es waren vorher 100 Abfragen und hinterher auch 100 Abfragen! Entweder ich habs versaut oder … .
    Verwendet habe ich WordPress 3.1

  9. 1
    define('TEMPLATEPATH', ... );

    ist eine ganz schlechte Idee wenn man wie ich Child Themes benutzt. Dadurch findet der das Eltern Theme nicht mehr, und die ganze Seite wird nicht mehr angezeigt ;)

Schreibe einen Kommentar

Ihre Email-Adresse wird nicht veröffentlicht. Pflichtfelder sind durch * markiert.

Sie können folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>