今回は下記リンクの前回記事の続きのような内容になっています。
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があればリンクを作成するようにしています。
ざっくりとはこんな感じでしょうか。