こんなことはありませんか?
wp_queryを使って、wordpressに追加した投稿を取得する時ってありますよね。
特定の条件に基づいて投稿を取得する時に使用しますが、
投稿数(posts_per_page)を指定しているのに、数が合わないなと思う時がきっとあるはず。
(筆者はありました)
そういった時の備忘録として、記事に残します!
wp_queryとは?
簡単に表現すると、
「条件付きでWordpressの投稿を取得するループ」を作ることですね。
基本はこんな形式のコードになるかと思います。
<?php
// カスタムループを開始
$args = array(
'post_type' => 'post', // 投稿タイプを指定
'posts_per_page' => 5, // 取得する投稿の数
);
$query = new WP_Query($args);
// ループを開始
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
// ここに投稿のコンテンツを表示するためのコードを追加
the_title(); // タイトルを表示
the_content(); // コンテンツを表示
}
} else {
// 投稿が見つからない場合の処理
echo '投稿が見つかりません。';
}
// ポストデータのリセット
wp_reset_postdata();
// カスタムループを終了
?>
条件を指定している部分は、こちらの部分です。
// カスタムループを開始
$args = array(
'post_type' => 'post', // 投稿タイプを指定
'posts_per_page' => 5, // 取得する投稿の数
);
$query = new WP_Query($args);
取得する投稿の数を「5」と指定しているのに、吐き出される投稿の数が合わない……。
原因はこちら
wordpressの「ブログのトップに固定」が選択された投稿が原因でした。

こちらにチェックが入っていると、
「post_per_page」で取得する投稿数を指定しても、無視されます。
解決策はこちら
パラメーター「’ignore_sticky_posts’ => 1,」を追記することで、
トップに固定の記事を無視することができます。
// カスタムループを開始
$args = array(
'post_type' => 'post', // 投稿タイプを指定
'posts_per_page' => 5, // 取得する投稿の数
'ignore_sticky_posts' => 1, //ブログのトップに固定を無視
);
$query = new WP_Query($args);
すごく便利です。
皆さんもつまづいた時は、こちらを参考に。