web-dev-qa-db-ja.com

Buddypress:新しいブログ投稿時にアクティビティを編集する

私は新しいブログ記事が作成されたときのためにBuddypress(1.7と最新のWordpressを実行している)上のアクティビティを編集しようとしています。デフォルトでは、抜粋を表示し、添付画像を表示します。また、コードを削除します(私は思います)。

私が達成しようとしているのは、ギャラリーのようなものを含む完全なブログ投稿を表示することです。インターネットやドキュメントを使って検索した結果、次のことがわかりました。

bp_activity_content_body() and bp_create_excerpt

オンラインコミュニティからの助けは私をに導いた:

bp_activity_truncate_entry in bp-activity-filters.php

しかし、私はどのようにフィルタを適用するか(apply/add)を考え出すことができないようです。 (bp_activity_truncate_entryに対して)次のことを試しましたが、これまでのところ成功していません。

apply_filters ('bp_activity_excerpt_length', 500); 

そしてbp_create_excerptの場合、次のようになります。

remove_filter( 'bp_create_excerpt', $length, $options ); 
function pnb_excerpt(){     $lenght = 500;  
$options = array(       'ending' => __( ' […]', 'buddypress' ),
 'exact'             => false,
  'html'              => false,
  'filter_shortcodes' => $filter_shortcodes_default); } 
add_filter( 'bp_create_excerpt', 'pnb_excerpt', $length, $options );

(追加ではなく適用も試してください)どちらもうまくいかないようです。しかし、私はこれらのフィルタをどのように機能させるのかわからない。誰かが私を正しい方向に向けることができますか?

2
MeRuud

まず、フィルタ機能の仕組みについてのメモです。開発者がフィルタリングしたいものや他のユーザにフィルタリングさせたいものがある場合、彼らはapply_filters()を呼び出すことによってそれに他のフィルタを適用します。あなたが何かをフィルタしたい特定の関数があるなら、あなたはadd_filter()を使ってそのフィルタフックにあなたの関数を追加します。そのフックにフックされたフィルタがどこかに適用されることになっている場合、もちろんそれはフックにフィルタを追加することに少しでも役に立ちます。この場合は、BuddyPressが投稿コンテンツにフィルタを適用している場所を探し、そのフィルタフックに関数を追加して、必要に応じてフィルタ処理できるようにします。

完全な投稿を表示するので、表示されているときにコンテンツをフィルタリングする必要があります。 BuddyPressは、表示する前にアクティビティコンテンツに'bp_get_activity_content_body'フィルタを適用します。そのため、投稿の本文全体を返す関数をそのフィルタに追加します。

function my_bp_full_posts_in_activity_feed( $content, $activity ) {

     if ( 'new_blog_post' == $activity->type ) {

        $post = get_post( $activity->secondary_item_id );

        if ( 'post' == $post->post_type )
             $content = apply_filters( 'the_content', $post->post_content );
     }

     return $content;
}
add_filter( 'bp_get_activity_content_body', 'my_bp_full_posts_in_activity_feed', 10, 2 );
0
J.D.