WordPress 新着表示にピン留めされた投稿も含める
管理画面で投稿を「この投稿を先頭に固定表示」にチェックすると、「ステッキ投稿(Sticky Post)」として扱われます。
ピン留め(=ステッキ投稿)された投稿をすべて表示し、それ以外の新着投稿を含めて合計N件表示したい場合の書き方。
<ul>
<?php
// 合計表示件数
$total_count = 5;
// ピン留め投稿IDを取得
$sticky_ids = get_option('sticky_posts');
$sticky_ids = array_slice($sticky_ids, 0, $total_count); // 最大5件に制限
// ピン留め投稿を取得
$sticky_posts = [];
if (!empty($sticky_ids)) {
$sticky_posts = get_posts([
'post__in' => $sticky_ids,
'post_status' => 'publish',
'orderby' => 'post__in'
]);
}
// 残りの件数を新着で補完
$remaining_count = $total_count - count($sticky_posts);
$new_posts = [];
if ($remaining_count > 0) {
$new_posts = get_posts([
'numberposts' => $remaining_count,
'post_status' => 'publish',
'post__not_in' => $sticky_ids, // ピン留めと重複しないように
'ignore_sticky_posts' => 1
]);
}
?>
<!-- ピン留め投稿 -->
<?php foreach ($sticky_posts as $post): ?>
<li>
<a href="<?php echo get_permalink($post); ?>">
<?php echo esc_html(get_the_title($post)); ?>(ピン留め)
</a>
</li>
<?php endforeach; ?>
<!-- 新着投稿 -->
<?php foreach ($new_posts as $post): ?>
<li>
<a href="<?php echo get_permalink($post); ?>">
<?php echo esc_html(get_the_title($post)); ?>
</a>
</li>
<?php endforeach; ?>
</ul>
合計件数を変えたい場合は → $total_count を変更する。
