已能在entry.php使用bp_get_activity_content_body(),如何在bp-core-template.php调用?
在bp-core-template.php中调用bp_get_activity_content_body()的方法
嘿,别担心,新手阶段遇到这种函数调用的困惑太正常啦!我来帮你捋清楚怎么在bp-core-template.php里用上这个函数。
首先得明白:bp_get_activity_content_body()是BuddyPress用来获取活动内容的函数,它默认依赖当前的活动对象上下文——在entry.php里,这个上下文通常已经由活动循环或者模板逻辑自动设置好了,所以直接调用没问题,但bp-core-template.php作为核心模板文件,很多时候没有默认的活动对象,所以得手动处理上下文。
下面是两种可行的方法:
方法1:手动设置活动对象上下文
如果你知道要获取的活动ID,可以先获取活动对象,把它设为当前活动,再调用函数:
// 替换成你实际需要的活动ID $target_activity_id = 123; // 获取活动对象 $activity = bp_activity_get( array( 'activity_id' => $target_activity_id ) ); if ( $activity ) { // 设置当前活动上下文 bp_set_current_activity( $activity ); // 现在可以正常调用函数了 $content = bp_get_activity_content_body(); echo $content; // 可选:重置上下文,避免影响后续代码 bp_reset_current_activity(); }
方法2:直接获取内容并应用过滤器
如果你不想依赖全局上下文,也可以直接从活动对象里取内容,再应用和bp_get_activity_content_body()一样的过滤器,这样输出效果和entry.php里的一致:
$target_activity_id = 123; $activity = bp_activity_get( array( 'activity_id' => $target_activity_id ) ); if ( $activity ) { // 应用和函数相同的过滤器,保证内容处理逻辑一致 $content = apply_filters( 'bp_get_activity_content_body', $activity->content ); echo $content; }
小提醒
别在bp-core-template.php的全局代码里直接调用哦!最好把这些代码放在合适的BuddyPress钩子中(比如bp_before_activity_loop、bp_activity_entry_content这类活动相关的钩子),或者在有活动对象上下文的代码块里使用,这样才不会出错~
内容的提问来源于stack exchange,提问作者Tanabutr Buakaew
相关产品推荐
相关产品推荐

