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

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

ただいまの
回答率

90.53%

  • WordPress

    7162questions

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

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

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 182

riku__

score 2

 前提・実現したいこと

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

理想は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 はこうなっています。
(これも検索で見つけたものをほぼコピペなのですが、どこのサイトを参考にしたのか分からなくなりました)

wp_list_comments(array(
    'walker'            => null,
    'max_depth'         => '',
    'style'             => 'ol',
    'callback'          => 'xxxxx',
    'end-callback'      => null,
    'type'              => 'all',
    'reply_text'        => '返信',
    'page'              => '',
    'avatar_size'       => 32,
    'format'            => 'html5',
    'echo'              => true
));

 試したこと

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

if (!is_admin()) {
    function my_get_comments($query){
        $query->query_vars['orderby'] = 'comment_date';
        $query->query_vars['order'] = 'DESC';
    }
    add_action( 'pre_get_comments', 'my_get_comments' );
    function my_comment_post_redirect( $location, $comment ) {
        $location = get_permalink( $comment->comment_post_ID );
        return $location;
    }
    add_filter( 'comment_post_redirect', 'my_comment_post_redirect', 10, 2 );
}


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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

+1

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/

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.53%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • WordPress

    7162questions

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