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

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

ただいまの
回答率

88.60%

bbpressのトピック表示数をページごとに変更する方法を知りたい。

解決済

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 740

hinokichi58

score 7

いま現在

[bbp-single-forum id=]

でトピック一覧を表示。

表示数は、bbpressプラグインの設定内にある
「1ページに表示するトピック・返信数」
で変更しています。

しかし、別のページでトピック一覧を表示するときに
「1ページに表示するトピック・返信数」の数値に統一されてしまうため
表示数を変更する方法をご教授いただけますと幸いです。

templates > default > bbpress > loop-topic.php内の

<?php while ( bbp_topics() ) : bbp_the_topic(); ?>

            <?php bbp_get_template_part( 'loop', 'single-topic' ); ?>

        <?php endwhile; ?>


ここのループ数を回数制限できるといいのですが、、、

あとは、includes > topics > template.phpの

function bbp_has_topics( $args = array() ) {

    // Default argument array
    $default = array(
        'post_type'      => bbp_get_topic_post_type(), // Narrow query down to bbPress topics
        'post_parent'    => $default_post_parent,      // Forum ID
        'meta_key'       => '_bbp_last_active_time',   // Make sure topic has some last activity time
        'meta_type'      => 'DATETIME',
        'orderby'        => 'meta_value',              // 'meta_value', 'author', 'date', 'title', 'modified', 'parent', rand',
        'order'          => 'DESC',                    // 'ASC', 'DESC'
        'posts_per_page' => bbp_get_topics_per_page(), // Topics per page
        'paged'          => bbp_get_paged(),           // Page Number
        'show_stickies'  => $default_show_stickies,    // Ignore sticky topics?
        'max_num_pages'  => false,                     // Maximum number of pages to show

        // Conditionally prime the cache for related posts
        'update_post_family_cache' => true
    );


このあたりを調整するのかなとは、思っているのですが、、、><

ぜひお助けのほどよろしくお願いいたします。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

+1

しかし、別のページでトピック一覧を表示するときに
「1ページに表示するトピック・返信数」の数値に統一されてしまうため
表示数を変更する方法をご教授いただけますと幸いです。
(中略)
このあたりを調整するのかなとは、思っているのですが、、、><

惜しい・・・

いいところまで調べられているので、もう少し頑張れば自己解決できたのではないでしょうか。


1ページの表示数は、質問に書かれている部分の bbp_has_topics() の下記で、設定されています。

        'posts_per_page' => bbp_get_topics_per_page(), // Topics per page

ここで、bbp_get_topics_per_page() 関数で表示数を決めているので、 bbp_get_topics_per_page() がどこで定義されているかを調べると includes/topics/functions.php の 3586 行にあります。

3586    function bbp_get_topics_per_page( $default = 15 ) {
3587    
3588            // Get database option and cast as integer
3589            $retval = get_option( '_bbp_topics_per_page', $default );
3590    
3591            // If return val is empty, set it to default
3592            if ( empty( $retval ) ) {
3593                    $retval = $default;
3594            }
3595    
3596            // Filter & return
3597            return (int) apply_filters( 'bbp_get_topics_per_page', $retval, $default );
3598    }

この関数をみると 最後(3597行目)で apply_filters( 'bbp_get_topics_per_page', $retval, $default ); とフィルターフックを実行しています。

そのため、bbp_get_topics_per_page フィルターフックを利用すると bbp_get_topics_per_page()関数が返す値を変更できることがわかります。

あとは、テーマの functions.php で、bbp_get_topics_per_page フィルターフックを定義して、その中で、条件分岐して返す値を変更すれば良いと思います。

たとえば、こんな感じでしょうか。 (わかりやすくするため、変更しない場合の else もつけています。)

function my_bbp_get_topics_per_page_244385( $retval ) {
  if ( is_page( 123 ) ) {
    $new_cnt = 50; // 固定ページ ID 123 は、 50件表示
  } elseif ( is_page( 300 ) ) {
    $new_cnt = 20; // 固定ページ ID 300 は、 20件表示
  } else {
    $new_cnt = $retval; // それ以外は、設定値
  }

  return $new_cnt;
}
add_filter( 'bbp_get_topics_per_page', 'my_bbp_get_topics_per_page_244385' );

分岐の判断に使用している is_page() は、条件分岐タグ なので、表示しているページを判別する条件にあったものを選んでください。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

関連した質問

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