web-dev-qa-db-ja.com

WP_Queryとget_posts

これらについてSEで number of questions _を読んだことがありますが、それでも正確な値はわかりません。使用法による違い。おそらく、大多数の二次ループにWP_Queryを使用し、配列で返される結果が必要な場合にのみget_postsを使用すると言うか、または別の言い方をすると、配列とオブジェクトが返す2つの主な違いがあります。 、または私が知っておくべき他のいくつかの主要な要因はありますか?

7
byronyasgur

Get_postsとWP_Queryの違い

get_posts()はスリムなWP_Queryとして見ることができます。実際、 ソース :を見てください。

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

get_posts()WP_Queryを使用しますが、投稿の配列のみを返します - それ以上はありません。さらにそれを設定します。

$r['no_found_rows'] = true;

通常(デフォルトではWP_Queryオブジェクトを使用) - WordPressは最初の10回目以降に投稿されていても、合計投稿数を照会します。そのため、get_posts()は実際には(わずかに)速くなります(スティッキーポストも無視されます)。

どちらを使用するか...

投稿の配列だけが必要で、クエリオブジェクトにneedを使用しない場合は-use get_posts()。それ以外の場合で、クエリオブジェクトメソッド、ページネーション、スティッキポストへのアクセスが必要な場合はWP_Queryを使用してください。

18
Stephen Harris

注意すべき重要な点の1つは、get_posts()にはnew WP_Query()にはないpost_typepost_statusを含む多数のデフォルト引数があることです。関数のデフォルトは、公開された投稿の取得を容易にするように構成されています。別の何かが必要な場合は、thosパラメーターを明示的に渡す必要がありますが、WP_Query()を使用する必要はありません。

たとえば、投稿ステータスに関係なくすべての投稿を取得する場合は、get_posts( array( "post_type" => 'any' ) );を呼び出す必要があります(「post_type」を空白のままにするか、empty()trueと評価するものはget_posts()デフォルト値の「公開」を適用します)。

2
Tom Auger