コメント欄を掲示板的に使えないか?ということで
の記事のように何とかできそうな予感がしてきました。そしてテストサイトにてルンルン気分でコメントをガンガンして表示してたら「いっぱいあるときはページ分割した方がいいなぁ」となりました。
そしてページ分割してみたら・・・あれ??1ページ目が何だか変!!ってなったんです。
例えばディスカッション設定で5件を1ページに表示するとして、5の倍数の場合は全く気付かないのですが、6件のコメントがあった場合には1ページ目が1件のコメント、2ページ目が5件のコメントになるんです。なんでだろーーーー??
ディスカッション設定でいろいろ変更してみたけどどうやらここの設定ではない、という結論に達しいろいろ調べていたらこの設定は全く関係ないのでは??に達しました。
要は最新のもの順にしても作られるページページはそのままで、ページ番号だけが入れ替わる・・・というのがWordPressのコメント一覧の動作のようです。だから、5件/ページで6件のコメントがあって新しいもの順にすると5件のページと1件のページが作られて、それが新しいものから1ページにする・・・となるため1ページ目が1件のコメントになってしまうんですね、多分。
そこで何とか1ページ目が5件表示にならないか?ということでやってみたら今回紹介する方法で解決できましたので備忘録を兼ねて紹介しておこうと思います。
・・・と偉そうに記事にしてますけど、私はコード知識に乏しい人間ですし、あくまでもいろいろなサイトに掲載されている対処方法を参考に試行錯誤したらたまたまできた結果なのでコードについての解説や質問をいただいても回答できませんのであしからず・・・。
コメントの1ページ目がおかしくなるのを改善する方法
【Simplicity2】テーマの場合、コメントに関する詳細なコードは「comments-default.php」に書かれているのでそれを開いて編集します。
コードの中に
<?php wp_list_comments('avatar_size=55'); //コメント一覧を表示 ?>
という部分があるので以下のコードに置き換えます(comments-default.phpをバックアップしておく、子テーマにコピーしてそこで修正など元に戻せるようにしておいてくださいね)。
<?php
$comments = get_comments( array(
'status' => 'approve'
, 'post_id' => $post->ID
) );
?>
<?php wp_list_comments( array (
'per_page' => $comments_per_page,
'reverse_top_level' => false
), $comments ); ?>
自分なりな解釈ですけど上のコード側では「アバターのサイズのみ指定するけど一覧をとにかく表示してちょーだい、詳細条件はWordPressの標準動作に従いまっせ!」というコード。
一方下のコードは「とりあえずその投稿に対する全部のコメントを抽出してチョーだい」としておいて、「コメントのリストを表示しなっせ」としてるんですね、きっと多分・・・。
まあget_commentsとwp_list_commentsの意味がそうだから間違いないでしょう・・・。
そしてこの件でいろいろごちゃごちゃ設定変更してたら、WordPressの設定にある「〇〇のコメントを各ページのトップに表示する」というのはページ送りしたときの〇ページ内の話であるようです(日本語ムズカシイデス)。知ってますよね、皆さんはきっと・・・。
なので、特に設定変更の必要がないと判断し、上のコード上で
'reverse_top_level' => false
としてページ内でも新しい順に絶対なるようにしました。
これでひとまず
- コメントを最新のものから順番に表示する
- ディスカッション設定で設定した件数でページを分割する
- 1ページ目の件数がおかしくなるのを改善する
- ページ内のコメントは必ず新しい順にする
ことができました。今回は使用中の【Simplicity2】テーマでの話でしたが、他のテーマでも同じ現象が出てたらこの方法で解決できるかもしれません。
ただこの件はこれで解決としましたがもう1つ問題が発生!それは、コメントを投稿するとコメントの一覧は最終ページ(この場合は一番古いコメント)が表示されてしまうんです。この問題についてはまた研究して解決したらまた紹介したいと思います。

