Categories: WordPress

previous_posts_link、next_posts_link が表示されない理由

かれこれ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のソースコードをみたら、

if ( !is_single() && ( $nextpage " . preg_replace('/&([^#])(?![a-z]{1,8};)/i', '&$1', $label) . ''; } 

ってあったわけです。

!is_single() はシングルページでない場合なので、シングルページでは当然なにも表示されないわけです。

ぁぁぁぁ。

そもそも、関数名みりゃ複数形と単数形でわかるんですけどね。
英語に弱いとこんな簡単なことを見落とすんですね。
というか、いっそ何かエラーを吐くか、どちらでも使えるようにしてくれたらいいのに。
というのは我儘か?

使用例

アーカイブページでのページング

シングルページでのページング

適当なCSS

#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;
}

こんな感じで。

 

nakaike