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’という引数がありますが、これは管理画面「ディスカッション」での
・”新しい”コメントを各ページのトップに表示する
と同じ設定ですので、今回の問題の解決にはなりません。
どなたかのお役に立てば幸いです。