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

BuddyBoss/BuddyPress匿名发送消息功能失效求助

问题分析与修复方案

你的代码核心问题是对messages_message_before_save过滤器的使用完全错误,这个钩子的作用是在消息保存前修改消息数据,而非重新调用发送函数,错误的参数和调用逻辑直接打断了BuddyPress的原生消息发送流程,导致消息无法发送。

具体问题点

  • messages_message_before_save过滤器的回调参数是单个数组$message,而非你写的$recipients, $subject, $content, $date_sent四个参数
  • 直接调用messages_new_message会触发重复的消息处理逻辑,同时覆盖了原钩子的预期行为,导致原生发送流程中断

修正后的代码

function bp_add_anonymous_checkbox() {
    if ( bp_is_active( 'messages' ) && bp_is_messages_component() && bp_is_current_action( 'compose' ) ) {
        ?>
        <p>
            <label for="bp-anonymous-message">
                <input type="checkbox" name="bp-anonymous-message" id="bp-anonymous-message" value="1">
                匿名发送此消息
            </label>
        </p>
        <?php
    }
}
add_action( 'bp_after_messages_compose_content', 'bp_add_anonymous_checkbox' );

function bp_anonymous_message_handler( $message ) {
    // 检查匿名复选框是否被勾选,同时确保当前用户有权限发送消息
    if ( ! empty( $_POST['bp-anonymous-message'] ) && is_user_logged_in() ) {
        // 替换发送者ID为匿名用户ID(55),确保该用户存在且有消息权限
        $message['sender_id'] = 55;
    }
    // 返回修改后的消息数组,交给原生流程处理
    return $message;
}
add_filter( 'messages_message_before_save', 'bp_anonymous_message_handler', 10, 1 );

额外注意事项

  • 确认ID为55的用户确实存在,并且该用户的角色允许发送私人消息
  • 上述代码兼容BuddyPress和BuddyBoss的核心消息流程,无需额外适配框架差异

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 23:25:17