it-swarm.com.de

WP_Query vs get_posts

Ich habe eine Nummer von Fragen zu SE bezüglich dieser gelesen, aber ich kann immer noch nicht den genauen Unterschied bezüglich der Verwendung herausfinden. Wäre es wahr zu sagen, dass ich wahrscheinlich WP_Query für die Mehrzahl der sekundären Schleifen verwenden und get_posts nur verwenden würde, wenn die Ergebnisse in einem Array zurückgegeben werden müssen, oder anders ausgedrückt, ist der Hauptunterschied zwischen den beiden, dem Array und der Objektrückgabe , oder gibt es einen anderen wichtigen Faktor, den ich beachten sollte?

7
byronyasgur

Der Unterschied zwischen get_posts und WP_Query

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

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

get_posts() use WP_Query, gibt aber nur eine Reihe von Beiträgen zurück - sonst nichts. Außerdem setzt es:

$r['no_found_rows'] = true;

Normalerweise (standardmäßig mit WP_Query object) - WordPress fragt ab, wie viele Beiträge es insgesamt gibt - auch wenn Sie erst nach den ersten 10 sind. Dadurch kann Paginierung durchgeführt werden. get_posts() ist also tatsächlich (etwas) schneller (es ignoriert auch klebrige Beiträge).

Welche zu benutzen ...

Wenn Sie nur ein Array von Posts benötigen und nicht need das Abfrageobjekt -use get_posts(). Andernfalls sollten Sie WP_Query verwenden, wenn Sie Zugriff auf die Methoden des Abfrageobjekts oder auf Seitenumbrüche oder Haftnotizen am oberen Rand benötigen.

18
Stephen Harris

Eine wichtige Anmerkung ist, dass get_posts() eine Reihe von Standardargumenten hat, die new WP_Query() nicht hat, einschließlich post_type und 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 Sie dies mit WP_Query() nicht tun müssten.

Wenn Sie beispielsweise alle Beiträge unabhängig von ihrem Beitragsstatus abrufen möchten, müssen Sie Folgendes aufrufen: get_posts( array( "post_type" => 'any' ) ); (lassen Sie "post_type" leer - oder alles, was empty() als true auswertet, bewirkt, dass get_posts() den Standardwert "publish" anwendet ").

2
Tom Auger