サポート » プラグイン » bbpressのフォーラムとトピックの更新時間について

  • 解決済 ootom20002000

    (@ootom20002000)


    bbpressのフォーラムとトピックの更新時間を合わせたいです。

    トピックは最後に投稿されたコメントの投稿時間が更新時間(最新の投稿)になるのですが、フォーラムは管理画面でフォーラムを更新した時間が更新時間(最新の投稿)になります。

    フォーラムを管理画面で手動で更新すれば、トピックの更新時間と同じになるのですが、それを自動で同じになるようにしたいです。

    管理画面上でフォーラムとトピックの更新時間が同じになるのが一番ですが、トップページ上で同じになれば問題ありません。

    自分ではbbpressのソースコードを調べてみたのですが、管理画面を操作しているデータがわからず途方に暮れています。もしわかる方いましたらご返信いただけると大変助かります。よろしくお願いいたします。

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

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

    確かに、ここの更新時間は最新の投稿の更新時間と一致しませんね。
    bbp_forum_freshness_link() (bbp_get_forum_freshness_link()) の不具合かもしれません (仕様かも?)。
    下記コードで最新の投稿の更新時間が表示されるようになると思います。お試しください。

    テーマの functions.php に、

    function my_bbp_get_forum_freshness_link( $anchor, $forum_id, $time_since, $link_url, $title, $active_id ) {
    	$time_since = bbp_get_forum_last_active_time( $active_id );
    	if ( ! empty( $time_since ) && ! empty( $link_url ) ) {
    		$anchor = '<a href="' . esc_url( $link_url ) . '" title="' . esc_attr( $title ) . '">' . esc_html( $time_since ) . '</a>';
    	} else {
    		$anchor = esc_html__( 'No Topics', 'bbpress' );
    	}
    	return $anchor;
    }
    add_filter( 'bbp_get_forum_freshness_link', 'my_bbp_get_forum_freshness_link', 10, 6 );

    ご返信ありがとうございます!
    functions.phpにおしえていただいたコードを挿入してみました、フォーラムの更新時間は変わりませんでした。それに更新時間が表示されずに「トピックがありません」と表示されてしまいます。

    フォーラムの更新時間はbbpress/templates/default/bbpress/loop-single-forum.phpの62行目にある<?php bbp_forum_freshness_link(); ?>が出力していると思います。

    おしえていただいたコードにあるbbp_get_forum_freshness_linkなどの関数が違っていたりするのでしょうか?もしくはif文の分岐が上手くいってないのかなと思いますがどうでしょうか?

    すみません、勘違いしてしまいました。m(__)m

    下記のように変更するのはどうでしょうか?
    forum.php 62行目:
    <?php bbp_forum_freshness_link(); ?>

    <?php
    $posts = get_posts( array(
    	'post_type' => bbp_get_reply_post_type(),
    	'post_status' => 'publish',
    	'posts_per_page' => 1,
    ) );
    if ( $posts ) {
    	$last_topic_id = $posts[0]->post_parent;
    	bbp_forum_freshness_link( $last_topic_id );
    }
    ?>
    • この返信は2ヶ月、 2週前にishitakaが編集しました。

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

    そちらのコードを挿入したところ、トピックの最新の投稿の更新時間になりました!
    ですが、フォーラムの全てが同じ更新時間になってしまいます。

    get_postsで取得している投稿が同じトピックのものになっているようです。get_postsのところで、フォーラムごとの最新のコメントがあったトピックのIDが取り出せればいいのですが、いろいろとやってみましたができませんでした。何か方法はありませんでしょうか?

    おっと失礼しました。これではどうでしょうか?

    <?php
    $posts = get_posts( array(
    	'post_type' => bbp_get_reply_post_type(),
    	'post_status' => 'publish',
    	'posts_per_page' => 1,
    	'meta_query' => array( array(
    		'key' => '_bbp_forum_id',
    		'value' => bbp_get_forum_id(),
    	) ),
    ) );
    if ( $posts ) {
    	$last_topic_id = $posts[0]->post_parent;
    	bbp_forum_freshness_link( $last_topic_id );
    }
    ?>

    で・・・できました!!感動です!!

    またまた後学のためにいくつかお聞きしたいです。毎回すいません。

    フォームのIDから検索しているのが以下のところかと思いますが、フォームのIDに該当するトピックを取ってこいということでしょうか?

    ‘meta_query’ => array( array(
    ‘key’ => ‘_bbp_forum_id’,
    ‘value’ => bbp_get_forum_id(),
    ) )

    bbp_get_forum_id()はフォーラムのIDなのはわかりますが、keyが”_bbp_forum_id”なのはなんででしょうか?しかも先頭にあるアンダーバーがさらに謎です。

    フォームのIDから検索しているのが以下のところかと思いますが、フォームのIDに該当するトピックを取ってこいということでしょうか?

    はい、そうです。

    keyが”_bbp_forum_id”なのはなんででしょうか?しかも先頭にあるアンダーバーがさらに謎です。

    _bbp_forum_id はカスタムフィールドです。カスタムフィールドについては下記ページをご覧ください。
    https://ja.wordpress.org/support/article/custom-fields/

    このカスタムフィールドにフォーラム ID が格納されています。

    'meta_query' => array( array(
    	'key' => '_bbp_forum_id',
    	'value' => bbp_get_forum_id(),
    ) ),

    これはカスタムフィールドの _bbp_forum_id がフォーラム ID (bbp_get_forum_id()) という条件になります。

    先頭のアンダーバーは、編集画面でカスタムフィールドを表示しないカスタムフィールドとなります。つまりユーザーによる変更ができないカスタムフィールドです。

    なぜ、_bbp_forum_id がフォーラム ID かは、コードを追って探しました (^^♪

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

    先頭のアンダーバーは、編集画面でカスタムフィールドを表示しないカスタムフィールドとなります。つまりユーザーによる変更ができないカスタムフィールドです。

    そうなんですね!これは知りませんでした!隠しカスタムフィールドってやつですね!

    “_bbp_forum_id”でbbpress内を検索すると”$query_vars[‘meta_key’] = ‘_bbp_forum_id’;”という記述がいくつか見受けられます。これは”bbp_forum_id”とかで検索かけてって見つけたのでしょうか?

    あと質問内容とは変わるのですが、wordpressやプラグインのphpの理解のためにいい教材などはないでしょうか?
    phpとwordpressなどのphpでは方向性が違うのか、phpの教材をみても全然wordpressのphpで調べたいことじゃないです。かといって、wordpressのphpの教材は入門すぎて参考にならないのが多く、どうやって勉強すればいいかわかりません。

    “_bbp_forum_id”でbbpress内を検索すると”$query_vars[‘meta_key’] = ‘_bbp_forum_id’;”という記述がいくつか見受けられます。これは”bbp_forum_id”とかで検索かけてって見つけたのでしょうか?

    これはコードを見てなんとなくです。上手く説明できません。(^^;

    wordpressやプラグインのphpの理解のためにいい教材などはないでしょうか?

    すみません、この辺のことは疎くてわかりません。m(__)m

    了解しました。ご返信ありがとうございます。
    長年の勘ですかね?さすがとしか言いようがないです。

    今回もishitakaさんにご回答いただき大変助かりました。
    本当にありがとうございます。
    また何かありましたらよろしくお願いいたします。

10件の返信を表示中 - 1 - 10件目 (全10件中)
  • このトピックに返信するにはログインが必要です。