自作のWordPressテーマで「先頭に固定表示」が効かなくて、ちょっと慌てたお話です。
自作のテーマでトップページ(front-page.php)に最新の投稿を5件くらい表示させたりするじゃないですか。そこに、先頭固定表示されなくて…。
でも、index.phpとかarchive.phpではちゃんと表示されています。
原因は「get_posts()」
「get_posts()」を使うと「先頭に固定表示」が無効になるらしいです。
「WP_Query()」に変更するだけですぐに直りました。
投稿の一覧系取得には「get_posts()」を使ってきてたんですが、こんな落とし穴があったとは…。
これからは「WP_Query」の方を使う方が無難かなぁと思っています。
「WP_Query()」を使う書き方
$arg = array(
'post_type' => 'post', //postは通常の投稿の場合(省略可)、カスタム投稿の時は投稿タイプのスラッグ名を指定する
'posts_per_page' => 5, //表示記事件数(-1で全件表示)
'category' => 10, //カテゴリーIDが10の記事にしぼりこみたいとき
'orderby' => 'date', //並び順
'order' => 'DESC' //降順(日付の新しい順)
);
$query = new WP_Query($arg);
これで$postsの中に条件が満たされた記事が取得されました。
「get_posts()」と同じです。
<?php if($query->have_posts()):
while($query->have_posts()):$query->the_post();?>
ここにループ内容
<?php endwhile;
wp_reset_query();
else:?>
記事がないとき
<?php endif;?>
ほぼ同じなのに、先頭固定表示の心配が無くなら、こちらを使う方がいいような気がしてます。