WP_Query vs get_posts

8

Ich habe eine Reihe von Fragen zu SE zu diesen gelesen, kann aber den genauen Unterschied bei der Verwendung immer noch nicht herausfinden. Wäre es wahr zu sagen, dass ich WP_Query wahrscheinlich für die meisten sekundären Schleifen verwenden und get_posts nur verwenden würde, wenn ich die in einem Array zurückgegebenen Ergebnisse benötige, oder anders ausgedrückt, ist der Hauptunterschied zwischen den beiden Arrays und der Objektrückgabe , oder gibt es einen anderen wichtigen Faktor, den ich beachten sollte?

byronyasgur
quelle

Antworten:

18

Der Unterschied zwischen get_posts & WP_Query

Sie können get_posts()als abgespeckte anzeigen WP_Query. In der Tat auf die Quelle schauen :

//... prepares query array $r
$get_posts = new WP_Query;
return $get_posts->query($r);

get_posts()verwenden WP_Query, aber nur eine Reihe von Beiträgen zurückgeben - nichts weiter. Darüber hinaus setzt es:

$r['no_found_rows'] = true;

Normalerweise (standardmäßig mit WP_QueryObjekt) - WordPress fragt ab, wie viele Beiträge es insgesamt gibt - auch wenn Sie erst nach den ersten 10 sind. Dies geschieht, damit eine Paginierung durchgeführt werden kann. Ist get_posts()also eigentlich (etwas) schneller (es ignoriert auch klebrige Beiträge).

Welche zu verwenden ...

Wenn Sie nur ein Array von Posts benötigen und das Abfrageobjekt -use nicht benötigenget_posts() . Andernfalls sollten Sie verwenden, wenn Sie den Zugriff auf die Abfrageobjektmethoden oder die Paginierung oder auf klebrige Beiträge oben benötigen WP_Query.

Stephen Harris
quelle
2

Eine wichtige Sache zu beachten ist, dass get_posts()es eine Reihe von Standardargumenten gibt, new WP_Query()die nicht haben, einschließlich post_typeund post_status. Die Standardeinstellungen der Funktion sind so konfiguriert, dass veröffentlichte Beiträge leichter abgerufen werden können. Wenn Sie etwas anderes wollen, müssen Sie diese Parameter explizit übergeben, während WP_Query()Sie dies nicht tun müssten.

Wenn Sie beispielsweise alle Beiträge unabhängig von ihrem Beitragsstatus abrufen möchten, müssen Sie get_posts( array( "post_type" => 'any' ) );Folgendes aufrufen: ( Wenn Sie "post_type" leer lassen - oder alles, empty()was ausgewertet wird, truewird get_posts()der Standardwert "veröffentlichen" angewendet ).

Tom Auger
quelle
1
WP_Queryhat die gleichen Standardeinstellungen für Posttyp und Status.
Milo
@ Milo Bist du sicher? Schauen Sie sich die Zeilen class-wp-query.php 1742 - 1746 an. Ich glaube, der Standardwert für post_typeist "" oder "any" für Steuerabfragen. Die Dokumente scheinen dies ebenfalls zu unterstützen.
Tom Auger
Der Post-Typ wird unter anybestimmten Umständen standardmäßig verwendet , z. B. bei einer Suche oder bei Steuerabfragen. Führen Sie eine neue WP_Queryund nur bestanden posts_per_page, es wird standardmäßig zu posten.
Milo