記事詳細ページで「次へ(next)」「前へ(prev)」をauthor毎に動作させる|コピペでOK|wordpress
記事詳細ページの「次へ」や「前へ」ボタンを設置しているホームページって多いかと思います。
少しだけレアなケースですが、このナビゲーションを投稿者毎にその投稿者の記事でのみ動作させたい場合があります。
でもwordpress標準の「get_previous_post()」や「get_next_post()」を使用した場合、引数でカテゴリーを指定することは可能ですが投稿者を固定することはできません。
そんな時に使えるコードをご紹介
まずは下記コードをfuncitons.phpにでも貼り付けましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
/* * 一つ新しい投稿を取得 * * @param string $my_post 現在の投稿オブジェクト * @param array $set_args query * @return object 投稿オブジェクト */ function mc_get_new_post($my_post,$set_args = array()){ if(empty($my_post)){ return false; } $m_day = get_the_time('Y/m/d',$my_post); $m_day2 = get_the_time('Y/m/d H:i:s',$my_post); $return_post = null; global $post; $args = array( 'posts_per_page' => -1, 'post_type' => $my_post->post_type, 'order' => 'ASC', 'post__not_in' => array($my_post->ID), 'date_query' => array( array( 'after' => $m_day, ), ), ); if(!empty($set_args)){ $args = array_merge($set_args,$args); } $my_posts = get_posts($args); foreach($my_posts as $post){ setup_postdata( $post ); if(get_the_time('Y/m/d H:i:s') > $m_day2){ $return_post = $post; break; } } wp_reset_postdata(); return $return_post; } /* *一つ古い投稿を取得 * * @param string $my_post 現在の投稿オブジェクト * @param array $set_args query * @return object 投稿オブジェクト */ function mc_get_old_post($my_post,$set_args = array()){ if(empty($my_post)){ return false; } $m_day = get_the_time('Y/m/d',$my_post); $m_day2 = get_the_time('Y/m/d H:i:s',$my_post); $return_post = null; global $post; $args = array( 'posts_per_page' => -1, 'post_type' => $my_post->post_type, 'order' => 'DESC', 'post__not_in' => array($my_post->ID), 'date_query' => array( array( 'before' => date('Y/m/d', strtotime($m_day.' + 1day')), ), ), ); if(!empty($set_args)){ $args = array_merge($set_args,$args); } $my_posts = get_posts($args); foreach($my_posts as $post){ setup_postdata( $post ); if(get_the_time('Y/m/d H:i:s') < $m_day2){ $return_post = $post; break; } } wp_reset_postdata(); return $return_post; } |
上記の内容としては古い記事や新しい記事を取得するための関数となります。
※通常の「get_previous_post()」などで要件を満たせる場合はそちらを使いましょう。
あとは下記のように呼び出すだけで使用できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<?php get_header(); the_post(); ?> <?php //~中略~ ?> <?php $prevPost = mc_get_new_post($post,array('author__in'=>array(get_the_author_meta('ID')))); $nextPost = mc_get_old_post($post,array('author__in'=>array(get_the_author_meta('ID')))); ?> <?php if(!empty($prevPost)): ?> <a href="<?php echo get_permalink($prevPost->ID); ?>" class="prev">前の記事</a> <?php endif; ?> <?php if(!empty($nextPost)): ?> <a href="<?php echo get_permalink($nextPost->ID); ?>" class="next">次の記事</a> <?php endif; ?> <?php //~中略~ ?> <?php get_footer(); ?> |
カテゴリーやカスタムタクソノミー、meta等指定したい場合は第二引数を調整して指定すれば簡単にカスタムできるので好きなようにカスタムして使用しましょうー
WordPress