BuddyPress のウィジェットに、「サイト全体の最新投稿」ウィジェットがあります。このウィジェットは、標準だとブログ投稿本文を全文引っ張ってきます(※追記※activity データベースのデータを全文引っ張ってきます。マルチバイトパッチプラグインを使用すれば、activity データベースに格納する時点で、投稿記事の抜粋になります)。全文では長すぎる場合に、一部を切り取るカスタマイズをしてみます。
function content_body_substr( $content ) { $length = 50; if ( mb_strlen( $content ) > $length ) { $content = mb_substr( esc_html( $content ) , 0, $length, 'UTF-8' ); } return $content; } add_filter( 'bp_get_activity_content_body', 'content_body_substr' );
まず、bp-blogs-widgets.php を調べると、BP_Blogs_Recent_Posts_Widget
というクラスがあります。この中に、bp_activity_content_body()
があり、ブログ本文を出力しているのでは?と予想できます。
bp_activity_content_body()
はどこで定義されているか調べると、bp-activity-templatetags.php にあります。さらに調べると、bp_activity_content_body()
は bp_get_activity_content_body()
を呼び出しており、bp_get_activity_content_body
というフィルタが用意されていることが分かるので、ここにフックすればOKです。
上のスクリプト例では、$length = 50
としていますが、この数字は適当に変更してください。なおこのカスタマイズをすると、bp_get_activity_content_body()
を呼び出している箇所すべてに影響します。
スクリプト自体の記述は、いつも通り、テーマの functions.php に書けば動作します。
※追記※
bp_activity_content_body()
は、activity データベースから全文を引っ張ってきます。しかし、データベースへ入れる時に、ブログ記事全文ではなく、抜粋(あるいは先頭の数十文字)を挿入しています。マルチバイト環境で運用する場合、activity データベースへの挿入時(抜粋作成)に wp multibyte patch を利用すると、動作が変わる可能性があります。
wordpress 抜粋文字幅を自在に取得するも参考にしてください。
[…] 参照元 WP Multibyte Patch | EastCoder; WordPress › フォーラム » Buddypressのサイト全体の投稿widgetで、表示文字を制限 サイト全体の最新投稿ウィジェットの本文 […]