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
相关产品推荐
相关产品推荐

