質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

Q&A

解決済

2回答

4605閲覧

【WordPress】コメント欄のカスタマイズがうまくいかない

ShogoChicago

総合スコア38

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

1グッド

1クリップ

投稿2016/05/25 08:57

編集2016/05/25 18:24

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
このような状態です。

##現在のコード

PHP

1【comments.php】 2<div id="comment_area"> 3 <div class="comment_post"> 4 5 <?php $args = array( 6 'title_reply' => '口コミを投稿する', 7 'label_submit' => '口コミを送信する', 8 'fields' => array( 9 'author' => '<p class="comment-form-author">' . 10 '<input id="author" name="author" type="text" value="' . esc_attr( $commenter['comment_author'] ) . '" size="30"' . $aria_req . ' placeholder="*お名前" /></p>', 11 ), 12 'comment_field' => '<p class="comment-form-comment">' . '<textarea id="comment" name="comment" cols="50" rows="6" aria-required="true"' . $aria_req . ' placeholder="*口コミの内容" /></textarea></p>', 13 ); 14 comment_form( $args ); ?> 15 </div> 16 <div class="posted_comments"> 17 <?php if(have_comments()): ?> 18 <h3 id="comments">投稿された口コミ</h3> 19 <div class="commets-list"> 20 <?php wp_list_comments(array('per_page' => '10','reverse_top_level' => true)); ?> 21 </div> 22 <?php endif; ?> 23 </div> 24</div> 25 26 27 28<?php if(get_comment_pages_count() > 1) : ?> 29 <div> 30 <?php previous_comments_link('前のコメント'); ?> 31 <?php next_comments_link('次のコメント'); ?> 32 </div> 33<?php endif; ?> 34 35 36 37

##参考サイト
http://motoyamayuki.com/blog/2015/07/22/comment_pagination/
このサイトを見ながら操作してみましたが、このサイトのような結果にはなりません。

もし解決策が思い浮かぶ方はぜひアドバイスをお願いします。

退会済みユーザー👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

テーマのコメント表示部分のコードが不明なので関数の紹介だけになりますがwp_list_commentsを使ってみてはどうでしょうか。
per_pageで表示件数、reverse_top_levelで表示順が指定できます。


参考サイトの方法を試した時の状態がわからないので現状のコードと参考サイトの情報から推測になります。

php

1//comments.php 2<?php wp_list_comments(array('per_page' => '10','reverse_top_level' => true)); ?> 34<?php wp_list_comments(); ?>

としてwp_list_commentsのパラメータ指定を無しにする

php

1//function.php 2function wp_desc_comments($comments) { 3 return array_reverse($comments); 4 //var_dump(count($comments)); 5} 6add_filter ('comments_array', 'wp_desc_comments');

function.phpに参考サイトの通りフィルターを使ってコメントを逆順にする

「ディスカッション」設定→”古い”コメントを各ページのトップに表示する
これで参考サイトと同じ設定になるかと思いますので、ダメな場合はfucntion.phpでコメントしているvar_dump(count($comments));のコメントを外して数値がいくつになるか確認してみてください

25(コメントの総数)であればこれで問題ないと思うのですが105等が返ってくる場合はcomments_arrayの仕様が変わっているかもしれません。

投稿2016/05/25 17:10

編集2016/05/25 22:39
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ShogoChicago

2016/05/25 18:22

すみません、実際のコードを書いていませんでした。 質問の本文にコードを追記しました。
退会済みユーザー

退会済みユーザー

2016/05/25 22:31

コード拝見しました気になる点を回答に追記します。
ShogoChicago

2016/06/02 06:54

ありがとうございます。 var_dump(count($comments)); のコメントアウトを外しましたが、表示させるにはechoで呼び出せばいいのでしょうか?
退会済みユーザー

退会済みユーザー

2016/06/02 17:39

var_dump()の位置を return array_reverse($comments);の前に変更してみてください。
ShogoChicago

2016/06/07 18:56 編集

ありがとうございました。 kei334様にいただいたリファレンスを参考に解決いたしました。
guest

0

ベストアンサー

コメントをテストできる環境が無いので未テストですが、コメントの取得を get_comments() で細かく指定してしまうのはどうでしょう。
order reverse_top_level などを調整する事で並び順は制御できそうな気がします。

PHP

1$page = intval( get_query_var( 'cpage' ) ); 2if ( !$current_cpage ) { 3 $page = 'newest' === get_option( 'default_comments_page' ) ? 1 : $wp_query->max_num_comment_pages; 4 set_query_var( 'cpage', $page ); 5} 6$comments_per_page = 10; // intval( get_option('comments_per_page') ) で管理画面で設定したものが入るはず 7$comments = get_comments( array( 8 'status' => 'approve' 9 , 'order' => 'ASC' // 'DESC'(降順)か'ASC'(昇順)を指定(省略時は'DESC') 10// , 'post_id' => $post->ID // もし当該ページ以外のコメントが出てくるならここを指定 11 ) ); 12// 13var_dump( $comments ); // コメントが思った順番に並んでいるかを確認する(実装時には外す) 14// 15wp_list_comments( array( 16 'per_page' => $comments_per_page 17 , 'page' => $page 18 , 'reverse_top_level' => false 19), $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

投稿2016/06/04 05:26

kei344

総合スコア69407

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ShogoChicago

2016/06/07 18:49

ありがとうございます。 こちらのコードはどのファイルに記述すればいいのでしょうか?
ShogoChicago

2016/06/07 18:55

ありがとうございます! 教えていただいた4つのリファレンスのうち、英語のものを参考にしたら解決しました。 <?php $comments_per_page = 10; $comments = get_comments( array( 'status' => 'approve' ) ); ?> <?php wp_list_comments( array ( 'per_page' => $comments_per_page, 'reverse_top_level' => false ), $comments ); ?> これで解決しました。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問