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

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

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

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

Q&A

1回答

2515閲覧

WPのコメントを新しい順+返信は古い順にしたい

riku__

総合スコア6

WordPress

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

0グッド

0クリップ

投稿2018/04/14 06:26

前提・実現したいこと

新しい順に表示し、返信部分は古い順にしたいです。
プラグインは使わない方法が知りたいです。
説明が下手で伝わらなかったら申し訳ないです。

理想はappmediaのコメント欄です。
https://appmedia.jp/fategrandorder/96261

現在のコメント数が8個だとしたら、このようにしたいです。

【1ページ目】
コメント8
---------
コメント7
---------
コメント6
-子コメント1
--孫コメント1
--孫コメント2
-子コメント2
--孫コメント1
---------
コメント5
---------
コメント4
---------
次>

【2ページ目】
コメント3
---------
コメント2
---------
コメント1
---------
<前

 
【ディスカッション設定】
1ページあたり「5」件のコメントを含む複数ページに分割
「最後」のページをデフォルトで表示する
「新しい」コメントを各ページのトップに表示する

↑こうすると並び順は理想なのですが、
1ページ目に3個のコメント、2ページ目に5個のコメントになり、
ページ送りが 次へ ではなく 前へ となってしまいます。

関係あるか分かりませんが comments.php 内の wp_list_comments はこうなっています。
(これも検索で見つけたものをほぼコピペなのですが、どこのサイトを参考にしたのか分からなくなりました)

php

1wp_list_comments(array( 2 'walker' => null, 3 'max_depth' => '', 4 'style' => 'ol', 5 'callback' => 'xxxxx', 6 'end-callback' => null, 7 'type' => 'all', 8 'reply_text' => '返信', 9 'page' => '', 10 'avatar_size' => 32, 11 'format' => 'html5', 12 'echo' => true 13));

試したこと

http://s-hiasa.ddo.jp/wp/wparticle/commentneworder/

php

1if (!is_admin()) { 2 function my_get_comments($query){ 3 $query->query_vars['orderby'] = 'comment_date'; 4 $query->query_vars['order'] = 'DESC'; 5 } 6 add_action( 'pre_get_comments', 'my_get_comments' ); 7 function my_comment_post_redirect( $location, $comment ) { 8 $location = get_permalink( $comment->comment_post_ID ); 9 return $location; 10 } 11 add_filter( 'comment_post_redirect', 'my_comment_post_redirect', 10, 2 ); 12} 13

ですが、こちらの方法では返信まで新しいものが上になってしまいます。
他に検索でヒットしたものは片っ端から試しましたが、どれも理想にはなってくれません。

機械翻訳して英語などでも調べましたが、調べ方が悪いのか、自力では解決できませんでした。
appmediaはソースを見る限りWPでできていると思うので、この並べ方ができないということはないと思うのですが、お手上げです。
どなたか助けてください。

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

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

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

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

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

guest

回答1

0

Walker のソースを読んで気づいたのですが、reverse_top_level reverse_children で処理できませんか?

【テンプレートタグ/wp list comments - WordPress Codex 日本語版】
https://wpdocs.osdn.jp/テンプレートタグ/wp_list_comments

'reverse_top_level'
( 真偽値 ) これを true にすると最新のコメントを先頭にして逆順に、false にすると一番古いコメントを最初に表示します。省略すると WordPress ダッシュボード内の設定を使います。

'reverse_children'
( 真偽値 ) これを true にすると一番新しい子コメント(返信)が付いたコメントを先頭にして逆順に表示します。



(以下ソースを読む前に書いていた、これでも一応処理できると思います)

get_comments() でHTMLを組むか、wp_list_comments の Walker を作って下層をソートしてしまうかどちらかで出来ると思います。

【get_comments – WordPress私的マニュアル】
https://elearn.jp/wpman/function/get_comments.html
↓ get_commentsのパラメータ。
【WP_Comment_Query::__construct() | Method | WordPress Developer Resources】
https://developer.wordpress.org/reference/classes/wp_comment_query/__construct/

【【WordPress】最近のコメントをカスタマイズして表示する方法 – ysklog】
http://ysklog.net/wordpress/1151.html

(たぶん Walker::paged_walk でそーとすれば)

【WordPress で Ajax:コメント取得編  |  wpxtreme】
http://wpxtreme.jp/get-comments-by-ajax-in-wordpress

【Walker::paged_walk() | Method | WordPress Developer Resources】
https://developer.wordpress.org/reference/classes/walker/paged_walk/

投稿2018/04/16 16:30

kei344

総合スコア69366

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問