Here you go. I have this in my theme’s functions.php file. I posted this code a while ago, but there was a small mistake which is fixed here.
function jpr_buddypress_add_notification( $reply_id = 0, $topic_id = 0, $forum_id = 0, $anonymous_data = false, $author_id = 0, $is_edit = false, $reply_to = 0 ) {
// this is who the notification goes to. whose post is replied to
$topic_author_id = bbp_get_topic_author_id( $reply_to );
// Bail if somehow this is hooked to an edit action
if ( !empty( $is_edit ) ) {
return;
}
// Get author information
// $topic_author_id = bp_loggedin_user_id();
$secondary_item_id = $author_id;
// Hierarchical replies
if ( !empty( $reply_to ) ) {
$reply_to_item_id = bbp_get_topic_author_id( $reply_to );
// if not replying to OP:
$topic_id = $reply_to;
}
// Get some reply information
$args = array(
'user_id' => $topic_author_id,
'item_id' => $topic_id,
'component_name' => bbp_get_component_name(),
'component_action' => 'bbp_new_reply',
'date_notified' => get_post( $reply_id )->post_date_gmt,
);
// Notify the topic author if not the current reply author
if ( $author_id !== $topic_author_id ) {
$args['secondary_item_id'] = $secondary_item_id ;
bp_notifications_add_notification( $args );
}
// Notify the immediate reply author if not the current reply author
if ( !empty( $reply_to ) && ( $author_id !== $reply_to_item_id ) ) {
$args['secondary_item_id'] = $secondary_item_id;
bp_notifications_add_notification( $args );
}
}
// remove the bbpress notification function so we don't get dupicate notifications
remove_action( 'bbp_new_reply', 'bbp_buddypress_add_notification', 10, 7 );
add_action( 'bbp_new_reply', 'jpr_buddypress_add_notification', 10, 7 );
// remove the bbpress format notification function before using our custom function
remove_filter( 'bp_notifications_get_notifications_for_user', 'bbp_format_buddypress_notifications', 10, 5 );
function jpr_format_buddypress_notifications( $action, $item_id, $secondary_item_id, $total_items, $format = 'string' ) {
// New reply notifications
if ( 'bbp_new_reply' === $action ) {
$topic_id = bbp_get_reply_id( $item_id );
$topic_title = bbp_get_reply_title( $item_id );
$topic_link = wp_nonce_url( add_query_arg( array( 'action' => 'bbp_mark_read', 'topic_id' => $topic_id ), bbp_get_reply_url( $item_id ) ), 'bbp_mark_topic_' . $topic_id );
$title_attr = __( 'Topic Replies', 'bbpress' );
if ( (int) $total_items > 1 ) {
$text = sprintf( __( 'You have %d new replies', 'bbpress' ), (int) $total_items );
$filter = 'bbp_multiple_new_subscription_notification';
} else {
if ( !empty( $secondary_item_id ) ) {
$text = sprintf( __( 'You have %d new reply to %2$s from %3$s', 'bbpress' ), (int) $total_items, $topic_title, bp_core_get_user_displayname( $secondary_item_id ) );
} else {
$text = sprintf( __( 'You have %d new reply to %s', 'bbpress' ), (int) $total_items, $topic_title );
}
$filter = 'bbp_single_new_subscription_notification';
}
// WordPress Toolbar
if ( 'string' === $format ) {
$return = apply_filters( $filter, '<a href="' . esc_url( $topic_link ) . '" title="' . esc_attr( $title_attr ) . '">' . esc_html( $text ) . '</a>', (int) $total_items, $text, $topic_link );
// Deprecated BuddyBar
} else {
$return = apply_filters( $filter, array(
'text' => $text,
'link' => $topic_link
), $topic_link, (int) $total_items, $text, $topic_title );
}
do_action( 'jpr_format_buddypress_notifications', $action, $item_id, $secondary_item_id, $total_items );
return $return;
}
}
add_filter( 'bp_notifications_get_notifications_for_user', 'jpr_format_buddypress_notifications', 10, 5 );