• 解決済 ootom20002000

    (@ootom20002000)


    bbpressでのトピックのコメント一覧で投稿順かもしくは逆に新着順を並べる方法があります。
    https://bbp-customize.com/change-reply-order/

    私のやりたい事は複数ページにまたがるときに、全体では新着順なのですが、ページごとでは新着順の逆にしたいです。

    下記のような感じです。

    1ページ目
    —————
    6番目の投稿
    7番目の投稿
    8番目の投稿
    9番目の投稿
    10番目の投稿←1番新しい投稿

    2ページ目
    —————
    1番目の投稿←1番古い投稿
    2番目の投稿
    3番目の投稿
    4番目の投稿
    5番目の投稿

    このようにできないでしょうか?

    ヘルプの必要なページ: [リンクを見るにはログイン]

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • こんにちは

    全体では新着順ということなので、これは参考ページの方法で新着順へ変更して、あとは、ループの直前 (テンプレートのループの直前や、loop_start、bbp_has_replies フックなど) などで投稿の配列 (posts) を逆順 (array_reverse 関数など) にするのはどうでしょうか?

    例:

    function my_bbp_has_replies( $has, $query ) {
    	$query->posts = array_reverse( $query->posts );
    	return $has;
    }
    add_filter( 'bbp_has_replies', 'my_bbp_has_replies', 10, 2 );
    トピック投稿者 ootom20002000

    (@ootom20002000)

    ご連絡ありがとうございます。

    参考ページの新着順のコードの後におしえていただいたコードを記述しましたら、希望通りの並び順になりました!!大変助かりました、ありがとうございます!!

    トピック投稿者 ootom20002000

    (@ootom20002000)

    すいませんが、後学のためにishitakaさんにお伺いしたいことがあります。

    ご回答していただいたとおり、並び順を新着順にしてページに出力する配列を逆順にすればいいかと思いましたが、私には出力を逆にする方法がわかりませんでした。

    bbpressのトピックのコメント一覧はtemplates/default/bbperss/content-single-topic.phpから出力されているようで、こちらのファイルの41行目あたりにあるコードが出力をループしているところだと思います。

    <?php if ( bbp_has_replies() ) : ?>
    <?php bbp_get_template_part( ‘pagination’, ‘replies’ ); ?>
    <?php bbp_get_template_part( ‘loop’, ‘replies’ ); ?>
    <?php bbp_get_template_part( ‘pagination’, ‘replies’ ); ?>
    <?php endif; ?>

    そこでお伺いしたいことが2点あります。

    1.bbp_has_replies()という関数になりかするのはわかりますが、おしえていただいたコードのmy_bbp_has_replies( $has, $query ) の$hasはどこから出てきたのでしょうか?またなぜ$hasという変数なのか?$hasという変数でなくでも何でもいいのか?

    2.おしえていただいたコードのadd_filter( ‘bbp_has_replies’, ‘my_bbp_has_replies’, 10, 2 );
    の「10, 2」はどういう意味でしょうか?10個の記事を2ページに分けろという意味でしょうか?試しにそちらを削除したらエラーが起きました。こちらに数字の入力は必須なのでしょうか?

    ポイントがずれているかもしれませんが、わかりましたらおしえていただきたいです。
    よろしくお願いいたします。

    1.bbp_has_replies()という関数になりかするのはわかりますが、おしえていただいたコードのmy_bbp_has_replies( $has, $query ) の$hasはどこから出てきたのでしょうか?またなぜ$hasという変数なのか?$hasという変数でなくでも何でもいいのか?

    bbp_has_replies() は、返信があるかどうかをチェックする関数で、返信のループの直前で呼び出されるので、今回は bbp_has_replies() 内でフックされる bbp_has_replies フックを利用しました。
    bbp_has_replies フックは、bbp_has_replies() 内で下記のように呼び出されています。

    apply_filters( 'bbp_has_replies', $bbp->reply_query->have_posts(), $bbp->reply_query );

    my_bbp_has_replies( $has, $query ) の $has は $bbp->reply_query->have_posts() に相当します。返信があれば true、なければ false になります。

    2.おしえていただいたコードのadd_filter( ‘bbp_has_replies’, ‘my_bbp_has_replies’, 10, 2 );
    の「10, 2」はどういう意味でしょうか?10個の記事を2ページに分けろという意味でしょうか?試しにそちらを削除したらエラーが起きました。こちらに数字の入力は必須なのでしょうか?

    add_filter 関数の第3、第4引数です。第3引数は、フィルターフックに登録された関数の中でこの関数を実行する順序になります。標準が10です。第4引数は、関数が受け取る引数の個数です。今回は $query が必要なので2となります。
    詳細は add_filter() のリファレンスをご覧ください。

    トピック投稿者 ootom20002000

    (@ootom20002000)

    ご返信ありがとうございます。

    bbpress/includes/replies/template.phpの中にご指摘のコードがありました。
    apply_filters( 'bbp_has_replies', $bbp->reply_query->have_posts(), $bbp->reply_query );

    なんとなくやっていることはわかりました。
    あとはapply_filtersとadd_filterについて調べたいと思います。

    ishitakaさん、この度はありがとうございました。
    また何かありましたらよろしくお願いいたします。

5件の返信を表示中 - 1 - 5件目 (全5件中)

トピック「bbpressの表示順をカスタムしたい」には新たに返信することはできません。