Der WordPress Main Query – Einblick und Funktionsweise

Als WordPress Entwickler sollte man die grundlegenden Konzepte des CMS kennen, unter anderem den WordPress Main Query. Dieser Artikel gibt einen Einblick in die zentrale Datenbankabfrage von WordPress und erklärt, wie der SQL-Query gebildet wird.

Was ist der WordPress Main Query?

Vor Kurzem habe ich bereits Aufbau und Struktur der WordPress Datenbank erklärt. Die Kommunikation von WordPress mit der Datenbank zum Lesen und Schreiben von Daten erfolgt dabei mit Datenbankabfragen, sogenannten SQL-Queries.

Beim Aufruf einer WordPress Seite werden üblicherweise viele verschiedene SQL-Abfragen durchgeführt, beispielsweise zur Anzeige von Navigationsmenüs oder Sidebar Widgets. Auch Theme und Plugin Optionen müssen erst aus der Datenbank geholt werden.

Gemeinsamkeit dieser sekundären SQL-Queries ist, dass diese erste bei konkreten Bedarf erfolgen. Sie werden von bestimmten Funktionen wie Menüs & Widgets oder im Rahmen von Themes und Plugins ausgelöst.

Darüber hinaus findet aber auch immer eine zentrale Datenbankabfrage bei der Initialisierung von WordPress statt. Diese Abfrage wird als Main Query bezeichnet.

Wie wird der Main Query gebildet?

Der Main Query wird durch die URL der aufgerufenen Seite im Frontend bestimmt.

Beispiele:

  • Beim Aufruf eines Beitrags oder Seite holt der Main Query einen einzelnen Post
  • Aufruf einer Kategorie führt zu einer Abfrage der letzten 10 Beiträge aus dieser Kategorie
  • Abschicken eines Suchformulars führt zu einer Suchabfrage in der Datenbank
  • Der Blog Index mit /page/3 führt zur Abfrage der Beiträge 20 bis 29

WordPress nimmt dazu die URL und bildet anhand der Permalink-Einstellungen die Argumente für die SQL-Abfrage. Der Main Query wird dann mit diesen Parameter mit WP_Query ausgeführt, der zentralen Klasse für alle WordPress Datenbankoperationen.

Wo wird der Main Query ausgeführt?

Grob vereinfacht erfolgen diese Schritte beim Aufruf einer WordPress Website:

  1. Die grundlegenden WordPress Core Dateien werden initialisiert
  2. Alle aktivierten Plugins und die functions.php des aktiven Themes werden geladen
  3. Die Funktion wp() wird ausgeführt.
  4. Diese ruft $wp->main() auf, wobei $wp eine Objektinstanz der Klasse WP ist.

Quelle: WordPress.org

Diese Funktion main() der Klasse WP ist verantwortlich für den Main Query:

public function main($query_args = '') {
	$this->init();
	$this->parse_request($query_args);
	$this->send_headers();
	$this->query_posts();
	$this->handle_404();
	$this->register_globals();

	do_action_ref_array( 'wp', array( &$this ) );
}

In der Funktion parse_request() wird die URL verarbeitet und die Query Arguments gebildet, in query_posts() der Main Query dann ausgeführt. Die restlichen Methoden dienen zur Definition von globalen Variablen, der Erstellung von HTTP Headers und dem Error 404 Handling.

Wer sich noch genauer mit WordPress Routing beschäftigen möchte, sollte sich den Artikel Life of a Front-end WordPress Request ansehen. Dort wird detailliert erklärt, wie WordPress aus URL und Rewrite Rules den Query generiert.

Main Query in WordPress verwenden

Der WordPress Main Query wird in der globalen Variable $wp_query gespeichert und steht damit überall zur Verfügung, unter anderem im WordPress Theme. Dort wird der Main Query mit dem WordPress Loop der Template Datei ausgegeben und der Content im Frontend dargestellt.

WordPress wählt dazu die Template Datei ebenfalls anhand der URL aus, z.B. die archive.php für Archive oder single.php für einzelne Beiträge. Ein umfangreiche Übersicht findest du in meinem Artikel über die verschiedenen Template Dateien in einem WordPress Theme.