かれこれ2,3時間も悩んでしまった。。。
カスタム投稿のシングルページ(個別ページ)で、前の記事や、次の記事へのリンクを表示させようとして、まったく表示されず、 いろいろ調べた挙句、とってもくだらない理由が判明。
シングルページでは、next_posts_linkじゃなくて、next_post_link
もう、くだらなすぎて笑っちゃいますが、シングルページでは、postsのsはいりません。
previous_posts_link、next_posts_linkはアーカイブページ用、
previous_post_link、next_post_linkはシングルページ用 ってわけで、もちろん調べればすぐにわかることだったんですが、思い込みってやつですね。
以前、おなじようなトラブルにあったときは、query_posts()を使っていて、その処理がちゃんとできてなかったのが原因だったので、 今回もそうに違いないとソースコードを見て回ったけれど、にさっぱり行き詰ってしまいました。
previous_posts_linkや、next_posts_linkは、!is_single() で分岐
それで、なんで気が付いたかというと、previous_posts_linkのソースコードをみたら、
1 |
if ( !is_single() && ( $nextpage <= $max_page ) ) { /** * Filter the anchor tag attributes for the next posts page link. * * @since 2.7.0 * * @param string $attributes Attributes for the anchor tag. */ $attr = apply_filters( 'next_posts_link_attributes', '' ); return '<a href="' . next_posts( $max_page, false ) . "" $attr>" . preg_replace('/&([^#])(?![a-z]{1,8};)/i', '&$1', $label) . '</a>'; } |
ってあったわけです。
!is_single() はシングルページでない場合なので、シングルページでは当然なにも表示されないわけです。
ぁぁぁぁ。
そもそも、関数名みりゃ複数形と単数形でわかるんですけどね。
英語に弱いとこんな簡単なことを見落とすんですね。
というか、いっそ何かエラーを吐くか、どちらでも使えるようにしてくれたらいいのに。
というのは我儘か?
使用例
アーカイブページでのページング
1 2 3 4 |
<ul id="pagenavi"> <li class="prev"><?php previous_posts_link('%link','前のページへ'); ?></li> <li class="next"><?php next_posts_link('%link','次のページへ'); ?></li> </ul> |
シングルページでのページング
1 2 3 4 |
<ul id="pagenavi"> <li class="prev"><?php previous_post_link('%link','前の記事へ'); ?></li> <li class="next"><?php next_post_link('%link','次の記事へ'); ?></li> </ul> |
適当なCSS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#pagenavi { margin-top: 5em; } #pagenavi .prev a, #pagenavi .next a{ color: #fff; margin: 5px 0; background-color: #f55; border-style: none; padding: 10px 25px; } #pagenavi .prev{ float: left; } #pagenavi .next{ text-align: right; } |
こんな感じで。