bbpressのフォーラムとトピックの更新時間について
-
bbpressのフォーラムとトピックの更新時間を合わせたいです。
トピックは最後に投稿されたコメントの投稿時間が更新時間(最新の投稿)になるのですが、フォーラムは管理画面でフォーラムを更新した時間が更新時間(最新の投稿)になります。
フォーラムを管理画面で手動で更新すれば、トピックの更新時間と同じになるのですが、それを自動で同じになるようにしたいです。
管理画面上でフォーラムとトピックの更新時間が同じになるのが一番ですが、トップページ上で同じになれば問題ありません。
自分ではbbpressのソースコードを調べてみたのですが、管理画面を操作しているデータがわからず途方に暮れています。もしわかる方いましたらご返信いただけると大変助かります。よろしくお願いいたします。
ヘルプの必要なページ: [リンクを見るにはログイン]
-
こんにちは
確かに、ここの更新時間は最新の投稿の更新時間と一致しませんね。
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 ); } ?>-
この返信は5年、 4ヶ月前に
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さんにご回答いただき大変助かりました。
本当にありがとうございます。
また何かありましたらよろしくお願いいたします。 -
この返信は5年、 4ヶ月前に
トピック「bbpressのフォーラムとトピックの更新時間について」には新たに返信することはできません。