私はグーグルとWPSEについて研究してきました、そして私が繰り返し見る唯一のことはshowposts
を使うことです、それは非推奨です。
私はWP_Query
に精通しています、そして私がposts_per_page
を私の限界(すなわち5)に設定し、そしてnopaging
をtrue
に設定するならば、それは " OK、私はあなたに5つの投稿しか与えない 。しかしこれはうまくいきません。
これどうやってするの?
今あなたが何をしようとしているのか理解できたと思います。 WP_Query
を使用してカスタムクエリを実行し、ページごとに5つの投稿のみを取得するように制限を設定すると、クエリによって5つの投稿のみが取得され、そのクエリは5つの投稿のみを保持しますBUTページネーションのため、WP_Query
は引き続きデータベース全体を実行し、クエリの条件に一致するすべての投稿をカウントします。
これは、クエリの$found_posts
および$max_num_pages
プロパティを見るとわかります。例を見てみましょう。
デフォルトの投稿タイプpost
に属する20の投稿があります。 のみページネーションなしの最新の5つの投稿が必要です。クエリは次のようになります
$q = new WP_Query( 'posts_per_page=5' );
var_dump( $q->posts )
は、期待どおりに最新の5つの投稿を提供しますecho $q->found_posts
は20
を提供しますecho $q->max_num_pages
は4
を提供しますこの余分な作業の影響は、投稿数が少ないサイトでは最小限ですが、数百または数千の投稿があるサイトを運営している場合は、これによりコストが高くなる可能性があります。 5つの最新の投稿だけが必要な場合、これはリソースの無駄です。
no_found_rows
と呼ばれる文書化されていないパラメーターがあります。これは、必要な5つの投稿が見つかった後にクエリを保釈するために使用できるブール値を使用します。これにより、WP_Query
は、クエリされた投稿の量を取得した後、基準を満たす他の投稿を検索しなくなります。このパラメーターは既にget_posts
に組み込まれているため、get_posts
はWP_Query
を使用していますが、get_posts
はWP_Query
よりも少し高速です。
結論として、クエリでページネーションを使用しない場合は、クエリの'no_found_rows=true'
を使用するのが賢明です。
@ user1750063がコードを言及したことを私は知っていますが、これを試してください
$args = array (
'post_type' => 'custom_post',
'nopaging' => false,
'posts_per_page' => '5',
'order' => 'DESC',
'orderby' => 'ID',
);
$query = new WP_Query( $args );
if ( $query->have_posts() ) {
while ( $query->have_posts() ) {
$query->the_post();
// display content
}
} else {
// display when no posts found
}
wp_reset_postdata(); // Restore original Post Data
質問のコメントについて@Pieter Goosenと会話した後、私は質問に答えて間違いを説明できると思います。
重要なのは、found_posts
が私を混乱させていたということです。その数は検索された投稿ですがそうではないと思います。 基準に一致する投稿の数です 。 WP_Query
には2つの部分があります。1つは(すべての)投稿を見つけるためのもので、もう1つはpagination
パラメータをチェックするときにコンテンツを取得するためのものです。つまり、取得された投稿数である$post_count
プロパティがあり(CodexによるとThe number of posts being displayed
)、もちろんposts_per_page
パラメータの数、および$posts
配列プロパティの項目数に等しくなります。
だから私は思ったようにWP_Query
は無駄な仕事をしていません^^
これが他の人に役立つことを願っています!
わかりました。「blog_posts」という投稿タイプを使用でき、その投稿タイプの5つの投稿を取得できます。ここにあなたがする必要があるものがあります
$args = array(
'post_type' => 'blog_posts',
'posts_per_page' => '5',
);
$query = new WP_Query($args);
上記のクエリは、カスタム投稿タイプでない場合、タイプ 'blog_posts'の5つの投稿を返します。すべての投稿を取得し、この'post_type' => 'posts',
のように置き換える場合は、この'posts_per_page' => '-1',
のように置き換えます。詳細 WPクエリ