Top

メモ書き

今回は下記リンクの前回記事の続きのような内容になっています。
ACFの日付選択ツールの日時をmeta_keyを利用して並べた記事の数を取得し、逆からナンバリングする方法!

カスタム投稿の日付選択ツールの順番で前後の記事に遷移させたい時に有効です。

詳細ページでmeta_keyを利用した並び順の前後の記事に遷移するボタンを設置する方法

さっそく結論となるコードを。

<?php 
$posts = get_posts( array (
    'post_type' => 'case',
    'posts_per_page' => -1,
    'meta_key' => 'c_supply',
    'orderby' => 'meta_value',
    'order' => 'DESC',
    'post_status' => 'publish',
));
$post_ids = array();
    foreach ( $posts as $p ) {
    // 投稿IDの配列を作成
    $post_ids[] = $p->ID; 
}
// 現在の記事IDが何番目か取得               
$current = array_search($post->ID, $post_ids);
$currentID = $post_ids[$current]; // 現在の記事ID
$post_count = count($post_ids); // 記事数
if ($current == 0) {
    $prevID = null;
} else {
    $prevID = $post_ids[$current - 1]; // 前の記事ID
}
if ($current == $post_count - 1) {
    $nextID = null;
} else {
    $nextID = $post_ids[$current + 1]; // 次の記事ID
}
?>
<div class="singleNav">
    <div class="singleNav__prev">
    <?php if ( !empty( $prevID ) ): ?>
        <a href="<?php echo get_permalink($prevID); ?>" rel="prev">Previous</a>
    <?php endif; ?>
    </div>
    <div class="singleNav__next">
    <?php if ( !empty( $nextID ) ): ?>
        <a href="<?php echo get_permalink($nextID); ?>" rel="next">Next</a>
    <?php endif; ?>
    </div>
</div>
<?php wp_reset_postdata(); ?>

それでは解説を。

まず大前提に、こちらはsingle-〇〇.phpに記述してください。
カスタム投稿のpost_typeは”case”、デイトピッカーのフィールド名は”c_supply”になっています。
14行目までで、$post_ids変数に投稿のIDの配列を格納、16行目で現在の記事IDが何番目か取得します。

17〜28行目で現在の記事IDをもとに、$prevID変数に前の記事ID、$nextID変数に次の記事IDを格納しています。

一番最初と一番最後の記事には、前の記事、次の記事がないのでエラー回避のために、if文でnullを入れ、32,37行目で前の記事IDと次の記事IDがあればリンクを作成するようにしています。

ざっくりとはこんな感じでしょうか。