こんにちは
確かに、ここの更新時間は最新の投稿の更新時間と一致しませんね。
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 );
}
?>
ご返信ありがとうございます。
そちらのコードを挿入したところ、トピックの最新の投稿の更新時間になりました!
ですが、フォーラムの全てが同じ更新時間になってしまいます。
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さんにご回答いただき大変助かりました。
本当にありがとうございます。
また何かありましたらよろしくお願いいたします。