You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

BuddyBoss添加管理员/版主标签后群组标题消失问题求助

问题修复:BuddyBoss动态信息流群组标题消失+添加用户角色标签

问题背景

需要在BuddyBoss的群组/动态模块中,为发布内容的用户名旁添加角色标签:

  • 管理员(Keymaster)显示Admin标签
  • 版主(Participant)显示Moderator标签

已成功添加标签,但动态信息流头部的群组标题消失,原实现代码如下:

function custom_activity_action_string( $action, $activity ) {

    // Get the author role
    $author_role = bbp_get_user_display_role($activity->user_id);

    // Set the label based on user role
    if ( $author_role == 'Keymaster' ) {
        $label = '<span class="group-admin-label">Admin</span>';
    } elseif ( $author_role == 'Participant' ) {
        $label = '<span class="group-moderator-label">Moderator</span>';
    } else {
        $label = '';
    }

    // Check if activity is in group activity page or main activity page
    if ( $activity->component == 'groups' && $activity->type == 'activity_update' ) {
        $group_label = __( 'posted an update in the group', 'text-domain' );
    } else {
        $group_label = __( 'posted an update', 'text-domain' );
    }

    // Get user data
    $user_link = bp_core_get_userlink( $activity->user_id );
    $user_name = bp_core_get_user_displayname( $activity->user_id );
    
        // Get the activity ID
    $activity_id = bp_get_activity_id();

    // Get the group ID
    $group_id = bp_activity_get_meta( $activity_id, 'item_id', true );

    // Get the group title
    $group_title = bp_get_group_name( $group_id );

    // Get group data if activity is in group activity page
    if ( $activity->component == 'groups' ) {
        $group_link = bp_get_group_permalink( $activity->item_id );
        $group_avatar = bp_get_group_avatar_url( $activity->item_id, array( 'type' => 'full' ) ); // Replace this line with bp_get_group_logo_url to show the group logo
        $group_name = bp_get_group_name( $activity->item_id );
        $group_post_title = bp_activity_get_meta( $activity->id, 'bp_activity_title', true ); // Get the title of the post within the group

        // Set label based on group type
        $group_type = bp_get_group_type( $activity->item_id );
        if ( $group_type == 'hidden' ) {
            $group_label = __( 'posted an update in the private group', 'text-domain' );
        }
    }

    // Build activity action string
    $action = sprintf(
        __( '%1$s %2$s %3$s %4$s %5$s %6$s', 'text-domain' ),
        $user_link,
        $label,
        $group_label,
        $group_title,
        isset( $group_avatar ) ? '<img src="' . $group_avatar . '" alt="' . $group_name . '"/>' : '',
        isset( $group_post_title ) ? $group_post_title : ''
    );

    // Add group name and link if activity is in group activity page
    if ( $activity->component == 'groups' ) {
        $action .= sprintf(
            __( ' %1$s', 'text-domain' ),
            '<a class ="grp-ttl" href="' . $group_link . '">group name' . $group_name . $group_title . '</a>',
            
        );
    }

    return $action;
}
add_filter( 'bp_get_activity_action_pre_meta', 'custom_activity_action_string', 10, 2 );

问题原因分析

  1. 群组ID获取错误:原代码通过元数据读取群组ID,而item_id本身就是$activity对象的属性,且bp_get_activity_id()在当前钩子上下文可能返回全局活动ID,而非当前处理的活动ID,导致群组名称获取失败。
  2. 格式串冗余混乱:Sprintf占位符过多,将头像、帖子标题等不适合放在头部的内容强行插入,破坏了原有信息流的排版逻辑。
  3. 重复冗余代码:末尾重复拼接群组链接,还硬编码了无意义的"group name"字符串,导致内容错位。

修复后的代码

function custom_activity_action_string( $action, $activity ) {
    // 获取作者角色(注:此处使用bbPress角色映射,需根据实际角色配置调整)
    $author_role = bbp_get_user_display_role( $activity->user_id );
    
    // 设置角色标签
    $label = '';
    if ( $author_role == 'Keymaster' ) {
        $label = ' <span class="group-admin-label">Admin</span>';
    } elseif ( $author_role == 'Participant' ) {
        $label = ' <span class="group-moderator-label">Moderator</span>';
    }

    // 区分群组动态和个人动态
    if ( $activity->component == 'groups' && $activity->type == 'activity_update' ) {
        $group_id = $activity->item_id;
        $group_link = bp_get_group_permalink( $group_id );
        $group_name = bp_get_group_name( $group_id );
        
        // 根据群组类型调整显示文本
        $group_type = bp_get_group_type( $group_id );
        $action_text = $group_type == 'hidden' 
            ? __( 'posted an update in the private group %s', 'text-domain' )
            : __( 'posted an update in the group %s', 'text-domain' );
        
        // 构建最终action字符串
        $action = sprintf(
            '%1$s%2$s ' . $action_text,
            bp_core_get_userlink( $activity->user_id ),
            $label,
            '<a class="grp-ttl" href="' . $group_link . '">' . $group_name . '</a>'
        );
    } else {
        // 个人动态逻辑
        $action = sprintf(
            '%1$s%2$s %3$s',
            bp_core_get_userlink( $activity->user_id ),
            $label,
            __( 'posted an update', 'text-domain' )
        );
    }

    return $action;
}
add_filter( 'bp_get_activity_action_pre_meta', 'custom_activity_action_string', 10, 2 );

关键修改说明

  • 直接调用$activity->item_id获取群组ID,避免错误的元数据读取逻辑。
  • 简化格式串,将群组链接整合到动态文本中,确保群组名称正常显示。
  • 移除冗余变量和重复代码,保持逻辑清晰。
  • 调整标签前的空格,优化用户名与标签的排版间距。

内容的提问来源于stack exchange,提问作者MD_SHOFI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 18:44:54