motoyamayuki.com

Blog

WordPressでコメントを新着順に表示させつつページ分割もおこなう方法

2015.07.22

WordPressでコメント機能を応用してBBS(掲示板)をつくりました。
そのときにけっこう悩んだポイントがあったので、解決方法をメモがてら。

 

実現したいこと

・コメントを降順(新しいものが上)で表示
・5件ごとにページ分割
という表示方法を実現したい。

もっと具体的に説明すると、例えばコメントが12件あった場合、

【1ページ目】12,11,10,9,8
【2ページ目】7,6,5,4,3
【3ページ目】2,1
という表示にしたい。
(数字が大きいほど、最新のコメント)

 

色々と試したこと

ここで厄介なのは、ページ分割。
もしページ分割をしないのであれば、管理画面の設定だけで対応できます。

管理画面の「設定」→「ディスカッション」より
・”新しい”コメントを各ページのトップに表示する

これでOKです。
ただ、ページ分割をしたい場合は、さらに

・(チェック入り)1ページあたり”X”件のコメントを含む複数ページに分割し、”最初”のページをデフォルトで表示する

この設定もする必要があります。
(Xは1ページに表示するコメント数です。お好きな数をどうぞ)
この設定をした場合、どういう表示になるかと言いますと、

先ほどと同じくコメントが12件あった場合、
【1ページ目】5,4,3,2,1
【2ページ目】10,9,8,7,6
【3ページ目】12,11
という表示になります。ダメですね。

同じく管理画面の「設定」→「ディスカッション」より
・”最後”のページをデフォルトで表示する
に設定するとどうなるか。【3ページ目】がまず表示されるだけです。
解決にはなりません。

 

 

解決方法

コメントの表示は

<?php wp_list_comments(); ?>

でおこないます。

そもそも、wp_list_comments関数が、昇順での出力にしか対応していないところが原因だと思います。
そこで、functions.phpに下記のコードを追加します。

//コメントを降順で表示
function wp_desc_comments($comments) {
    return array_reverse($comments);
}
add_filter ('comments_array', 'wp_desc_comments');

array_reverseという配列関数を使用して、コメントの順番を逆にした新しい配列を返します。
これにより、コメントが降順になりました。

その上で、管理画面の「設定」→「ディスカッション」の設定を

・(チェック入り)1ページあたり”X”件のコメントを含む複数ページに分割し、”最初”のページをデフォルトで表示する
・”古い”コメントを各ページのトップに表示する

というようにします。
ここでポイントは「古いコメント」にすることです。
functions.phpに追記したコードでコメントの順番が昇順から降順に変わりましたが、WordPress側はそれを知りませんので、”新しい”と”古い”が逆になっています。
つまり、”古い”にすると、”新しい”コメントが上に表示されます。

wp_list_commentsの引数でこのあたりも指定できるようになれば嬉しいですね。
ちなみに’reverse_top_level’という引数がありますが、これは管理画面「ディスカッション」での
・”新しい”コメントを各ページのトップに表示する
と同じ設定ですので、今回の問題の解決にはなりません。

どなたかのお役に立てば幸いです。

 

  • このブログをはてなブックマークに追加

Contact

お仕事のご依頼、面白いことのお誘い、一度お話してみたい!などなど、鬼頭祐毅へのお問い合わせは、下記のフォームよりお願いします。送信後、 info@motoyamayuki.com より確認のメールが届きます。

お問い合わせフォーム

    お名前

    メールアドレス

    内容

    Treble