Entscheidungshilfe: get_post() oder WP_Query

Die Zeiten ändern sich.

Dieser Beitrag scheint älter als 3 Jahre zu sein – eine lange Zeit im Internet. Der Inhalt ist vielleicht veraltet.

WordPress stellt oft verschieden Wege bereit um an Daten zu kommen. Im Umfeld von Inhalt - Einzelne Artikel, Kommentare, ... - beschränkt sich dies im Grunde auf zwei Wege. Beide sind im Netz zigfach in Tutorials hinterlegt und oft ist die Nutzung des jeweiligen Weges nicht zu Ende gedacht. Es gibt viele Artikel um die Hintergründe zu verstehen und sich mit dem gewonnen Verständnis für die entsprechende Methode zu entscheiden. Herausragend in Bildform und verständlich ist der Eintrag #1753 im WPSE.

Bitte nicht mit get_posts() verwechseln, get_posts() und get_post() sind für unterschiedliche Resultate erstellt. In kurzer Form dient get_posts() für viele Inhalte zum Type post. Die Entscheidungshilfe hier ist für die Ausgabe von einem Artikel, dessen Inhalte, dessen zugehörigen Daten. Im Grunde kann man aber von der Regel zu get_posts vs. WP_Query einiges ableiten.

Ich möchte nur eine kurze Entscheidungshilfe geben, die euch und mich in die Lage versetzt, aufgrund einiger weniger Punkte zu entscheiden, beim Holen einzelner Inhalte - get_post() oder WP_Query.

Tests

An folgendem kleinen Beispiel kann man die Unterschiede bspw. messen und an Hand der Anzahl der Queries vergleichen. Man kann wesentlich komplexere Beispiele bauen. Aber ich denke, dass gerade die Einfachheit das Verständnis fördert. Die Queries kann man entweder einfach per Ausgabe sehen $wpdb->queries oder alternativ bspw. mit Hilfe des Plugins Debug Objects ohne Aufwand einsehen.

Als erster wird der Artikel mit ID 1 geholt und Title und Content ausgelesen.


$post_1  = get_post( 1 );
$title   = $post_1->post_title;
$content = $post_1->post_content;

Den gleichen Inhalt holen wir nun über den WP_Query.


$query_1 = new WP_Query( 'p=1' );
$title   = $query_1->posts[0]->post_title;
$content = $query_1->posts[0]->post_content;

Welche Daten werden benötigt?

Wenn Daten zum Artikel, wie Kommentare, -Anzahl, Autoren-Daten oder Benutzerdefinierte Felder benötigt werden, dann nutze WP_Query. Wenn lediglich Daten aus der Tabelle posts benötigt werden, dann nutze get_post() und spare Datenbankabfragen.

Es wird ein Loop benötigt?

Werden im Loop Conditionals benötigt (if else, is_tag() etc.) dann nutze WP_Query. Sollen die Conditionals im Bezug auf den Artikel laufen, dann nutze get_post().

Code als Sprache?

WP-Query is komplexer, nicht so schnell zu durchschauen. Wenn man explizit auf verschiedene Post Types will, dann WP_Query. Ansonsten kann das Lesen und verstehen des Codes bei der Verwendung von get_post() einfacher sein. Für Live-betrieb sollte aber die Anzahl der Datenbankabfragen ein gewichtige Zahl sein.

Hinweis WP_Query

Bei der Verwendung von WP_Query lohnt immer der Gedanke an einen Cache, beispielsweise ist der standard WP_Object_Cache oder alternativ der Transient Cache von WordPress dafür schnell genutzt.

Comments are closed.