同一のカスタムフィールド値を持つ投稿の前後記事リンクを出力する
前に一度やったことがあるが忘れていたのでメモ。
ぜろみやさんのブログでやってるの見たな…と思いつつ、まず自力でやってみようと思い実装しました。 以下ソース。
<?php /** * 同一のカスタムフィールドを持つ前後リンクの出力 * * 取得手順 * (1) 対象となるカスタムフィールドの投稿をサブループで全件取得する。 * (2) (1)で取得した投稿内での、現在の記事のインデックスを取得する。 * (3) (2)で取得したインデックスをもとに前後の記事のパーマリンクを取得する。 * (4) 取得した前後リンクを出力する。 */ // (1) $current = $post; $currentID = $current->ID; $postIDs = array(); $args = array( 'post_type' => $current->post_type, // 任意の投稿タイプ 'posts_per_page' => -1, // -1で全件取得する 'post_status' => 'publish', 'order' => 'DESC', 'orderby' => 'date', 'meta_query' => array( array( 'key' => 'hogehoge', // 任意のカスタムフィールド名 'value' => 1, 'compare' => '=', ) ) ); $new_query = new WP_Query( $args ); if( $new_query -> have_posts() ){ while($new_query -> have_posts()){ $new_query -> the_post(); $postIDs[] = get_the_ID(); } } wp_reset_postdata(); // (2) $currentIndex = array_search( $currentID, $postIDs ); // (3) $prev_link = $currentIndex === count($postIDs) - 1 // 表示している記事がもっとも新しいかどうか判定 ? '' : '<a href="' . get_permalink($postIDs[$currentIndex + 1]) . '">以前の記事へ</a>'; $next_link = $currentIndex === 0 // 表示している記事が最新かどうか判定 ? '' : '<a href="' . get_permalink($postIDs[$currentIndex - 1]) . '">新しい記事へ</a>'; ?> <?php // (4) if ( $prev_link || $next_link ) : ?> <ul class="adjacentPostLinks"> <?php if ( $prev_link ) : ?> <li><?php echo $prev_link; ?></li> <?php endif; ?> <?php if ( $next_link ) : ?> <li><?php echo $next_link; ?></li> <?php endif; ?> </ul> <?php endif; ?>
どの記事が前後になるか?は実際に記事を取得してみないとわからないため、サブループで記事を取得してそこから抽出する形になっています。
実装した後にぜろみやさんの記事を見てみたら、同じく全件取得する形で実装されており一安心。変な実装の仕方ではないようなのでよかったです。
参考