CHIPS

制作チップス

WordPress 新着表示にピン留めされた投稿も含める

2025年7月18日

カテゴリー: 制作チップス

管理画面で投稿を「この投稿を先頭に固定表示」にチェックすると、「ステッキ投稿(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 を変更する。