WordPressのWP_Query関数を使っていても「この投稿を先頭に固定表示」を使うと記事件数がはみ出してしまう問題を解決するソースコード

こんにちは。コワーキングスペース7Fの星野邦敏です。

WordPressのテーマのカスタマイズ方法として、WP_Query関数を使って記事一覧を表示するケースがあると思います。

例えば、以下のような感じです。

<?php
$my_query = new WP_Query(array(
	'posts_per_page' => 10,
	'orderby' => 'date',
	'order' => 'DESC'
));
?>

しかしながら、この方法では、投稿の「この投稿を先頭に固定表示」を使い、その記事件数の最後の記事より古い日付の記事を、先頭に固定表示させてしまいますと、上記のコードでは10件の記事一覧になるはずが、11件・12件とはみ出してしまいます。

WordPressのWP_Query関数を使っていても「この投稿を先頭に固定表示」を使うと記事件数がはみ出してしまう問題を解決するコード

そこで、以下のようなソースコードを書くことで、この問題は解決することができます。

<?php
$list_cnt = 10;
$sticky = get_option('sticky_posts');
if ( !empty($sticky) ) $list_cnt -= count($sticky);
$my_query = new WP_Query(array(
	'posts_per_page' => $list_cnt,
	'orderby' => 'date',
	'order' => 'DESC'
));
?>

私は個人的には、投稿の「この投稿を先頭に固定表示」を使わないので、運用でカバーする方向が多かったのですが、汎用化する必要がある場合などは、上記のように、一旦変数に入れて記事表示件数を操作する必要がありますね。

WordPressテーマ制作者の人でもしこの問題に直面した人がいましたら、ぜひご参考ください。