WordPressのコメント欄を新着順(降順)にしてページ分割をおこなう方法
こんにちは。
Webエンジニアのまぶちです。
今回はWordPressのコメント欄の並び順を新着順にしてページ分割をおこなう方法を解説します。
具体的には
1ページ目→14.13.12.11.10
2ページ目→9.8.7.6.5
3ページ目→4.3.2.1
のように表示させる方法です。
ディスカッション設定の
「1ページあたりn件のコメントを含む複数ページに分割し、”最後”のページをデフォルトで表示する」にチェックを入れ、
「”新しい”」コメントを各ページのトップに表示する
と設定すれば上手くいくと思ったのですが、
1ページ目→5.4.3.2.1
2ページ目→10.9.8.7.6
3ページ目→14.13.12.11
※3ページ目が最初に表示される
となります。
これでも良いと言えば良いのですが、ページングの表示がいきなり「前のコメント」となり少し違和感があります。
できれば1ページ目に最新のコメントを表示させ、「次のコメント」をクリックで過去のコメントを表示させたい・・・
また、コメント数が6件や11件の場合には最初のコメントが1件しか表示されず、不便です。
解決策
まず、ディスカッション設定の「1ページあたりn件のコメントを含む複数ページに分割し、”最初”のページをデフォルトで表示する」にチェックを入れてください。
この時、”最初”にするのを忘れないように注意してください。
そして、comments.phpのwp_list_commentsの部分を下記に書き換えれば解決です。
1 2 3 4 5 6 7 8 9 10 |
<?php $comments = get_comments( array( 'status' => 'approve', 'post_id' => $post->ID ) ); wp_list_comments( array( 'per_page' => 5, 'reverse_top_level' => false ), $comments ); ?> |
get_commentsで最新のコメントが降順で取得できるので、それをwp_list_commentsの第2引数に渡しています。
per_pageは5としていますが、1ページあたりに表示させたいコメント数なので必要に応じて変更してください。
reverse_top_levelをtrueにすると順番が逆になってしまうので、falseを設定します。
ページングが表示されない場合は下記のようにしてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php $comments = get_comments( array( 'status' => 'approve', 'post_id' => $post->ID ) ); wp_list_comments( array( 'per_page' => 5, 'reverse_top_level' => false ), $comments ); if(get_comment_pages_count() > 1){ echo '<div>'; paginate_comments_links(); echo '</div>'; } ?> |
paginate_comments_linksでページングを追加しています。
良かったら参考にしてみてください。
コメントを残す