【WordPress】コメント欄のカスタマイズがうまくいかない
- 評価
- クリップ 1
- VIEW 3,381
Wordpressで構築しているサイトで、ユーザが投稿したコメントの表示順と表示数の調整がうまくいかずに悩んでいます。
実現したいこと
例えば、ある投稿ページに対して、ユーザーから25個のコメントがあったとします。
1を最も古い投稿、25が最新のコメントという状態です。
やりたいことは、このコメント欄の表示のされ方を
1ページ目:25,24,23,22,21,20,19,18,17,16
2ページ目:16,15,14,13,12,11,10,9,8,7,6
3ページ目:5, 4, 3, 2, 1
という順番に表示されるようにしたいと思っています。
現在の状態
現在、 私のWPの設定画面では、
⬜︎1ページあたり10件のコメントを含む複数ページに分割し、のページをデフォルトで表示する
にチェックがあり、
<古い>コメントを各ページのトップに表示する
というように設定されています。
結果は
1ページ目:25,24,23,22,21
2ページ目:20,19,18,17,16,15,14,13,12,11
3ページ目:10,9,8,7,6,5, 4, 3, 2, 1
このような状態です。
現在のコード
【comments.php】
<div id="comment_area">
<div class="comment_post">
<?php $args = array(
'title_reply' => '口コミを投稿する',
'label_submit' => '口コミを送信する',
'fields' => array(
'author' => '<p class="comment-form-author">' .
'<input id="author" name="author" type="text" value="' . esc_attr( $commenter['comment_author'] ) . '" size="30"' . $aria_req . ' placeholder="*お名前" /></p>',
),
'comment_field' => '<p class="comment-form-comment">' . '<textarea id="comment" name="comment" cols="50" rows="6" aria-required="true"' . $aria_req . ' placeholder="*口コミの内容" /></textarea></p>',
);
comment_form( $args ); ?>
</div>
<div class="posted_comments">
<?php if(have_comments()): ?>
<h3 id="comments">投稿された口コミ</h3>
<div class="commets-list">
<?php wp_list_comments(array('per_page' => '10','reverse_top_level' => true)); ?>
</div>
<?php endif; ?>
</div>
</div>
<?php if(get_comment_pages_count() > 1) : ?>
<div>
<?php previous_comments_link('前のコメント'); ?>
<?php next_comments_link('次のコメント'); ?>
</div>
<?php endif; ?>
参考サイト
http://motoyamayuki.com/blog/2015/07/22/comment_pagination/
このサイトを見ながら操作してみましたが、このサイトのような結果にはなりません。
もし解決策が思い浮かぶ方はぜひアドバイスをお願いします。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
+1
テーマのコメント表示部分のコードが不明なので関数の紹介だけになりますがwp_list_comments
を使ってみてはどうでしょうか。
per_page
で表示件数、reverse_top_level
で表示順が指定できます。
参考サイトの方法を試した時の状態がわからないので現状のコードと参考サイトの情報から推測になります。
//comments.php
<?php wp_list_comments(array('per_page' => '10','reverse_top_level' => true)); ?>
↓
<?php wp_list_comments(); ?>
としてwp_list_comments
のパラメータ指定を無しにする
//function.php
function wp_desc_comments($comments) {
return array_reverse($comments);
//var_dump(count($comments));
}
add_filter ('comments_array', 'wp_desc_comments');
function.phpに参考サイトの通りフィルターを使ってコメントを逆順にする
「ディスカッション」設定→”古い”コメントを各ページのトップに表示する
これで参考サイトと同じ設定になるかと思いますので、ダメな場合はfucntion.phpでコメントしているvar_dump(count($comments));
のコメントを外して数値がいくつになるか確認してみてください
25
(コメントの総数)であればこれで問題ないと思うのですが10
や5
等が返ってくる場合はcomments_array
の仕様が変わっているかもしれません。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
checkベストアンサー
0
コメントをテストできる環境が無いので未テストですが、コメントの取得を get_comments()
で細かく指定してしまうのはどうでしょう。
order
reverse_top_level
などを調整する事で並び順は制御できそうな気がします。
$page = intval( get_query_var( 'cpage' ) );
if ( !$current_cpage ) {
$page = 'newest' === get_option( 'default_comments_page' ) ? 1 : $wp_query->max_num_comment_pages;
set_query_var( 'cpage', $page );
}
$comments_per_page = 10; // intval( get_option('comments_per_page') ) で管理画面で設定したものが入るはず
$comments = get_comments( array(
'status' => 'approve'
, 'order' => 'ASC' // 'DESC'(降順)か'ASC'(昇順)を指定(省略時は'DESC')
// , 'post_id' => $post->ID // もし当該ページ以外のコメントが出てくるならここを指定
) );
//
var_dump( $comments ); // コメントが思った順番に並んでいるかを確認する(実装時には外す)
//
wp_list_comments( array(
'per_page' => $comments_per_page
, 'page' => $page
, 'reverse_top_level' => false
), $comments );
また、get_comments()
は offset
が指定できるので、ページ数と分割数を指定して取得し、wp_list_comments( array(), $comments );
とすることもできそうな気がします。
【get_comments:WordPress私的マニュアル】
http://elearn.jp/wpman/function/get_comments.html
【wp_list_comments:WordPress私的マニュアル】
http://elearn.jp/wpman/function/wp_list_comments.html
【「wp_list_comments() でコメントが表示されない」~4年前の悩みが時を超えて解決されるドラマチックというか、ほんとは恥ずかしい話~ ? ブログ名つけてください。】
http://www.katacom.jp/a/283
【Aggregate comments, with pagination - WordPress Development Stack Exchange】
http://wordpress.stackexchange.com/questions/63770/aggregate-comments-with-pagination
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.35%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2016/05/26 03:22
質問の本文にコードを追記しました。
2016/05/26 07:31
2016/06/02 15:54
var_dump(count($comments));
のコメントアウトを外しましたが、表示させるにはechoで呼び出せばいいのでしょうか?
2016/06/03 02:39
2016/06/07 15:23 編集
kei334様にいただいたリファレンスを参考に解決いたしました。