BuddyPress Add Custom Notification
•2 min read
buddypresswordpressphp
Example of adding a custom notification without creating a new component.
<?php
// this is to add a fake component to BuddyPress. A registered component is needed to add notifications
function custom_filter_notifications_get_registered_components( $component_names = array() ) {
// Force $component_names to be an array if ( ! is_array( $component_names ) ) { $component_names = array(); }
// Add 'custom' component to registered components array array_push( $component_names, 'custom' );
// Return component's with 'custom' appended return $component_names; } add_filter( 'bp_notifications_get_registered_components', 'custom_filter_notifications_get_registered_components' );
// this gets the saved item id, compiles some data and then displays the notification function custom_format_buddypress_notifications( $content, $item_id, $secondary_item_id, $total_items, $format = 'string', $action, $component ) { // New custom notifications if ( 'custom_action' === $action ) { $comment = get_comment( $item_id ); $custom_title = $comment->comment_author . ' commented on the post ' . get_the_title( $comment->comment_post_ID ); $custom_link = get_comment_link( $comment ); $custom_text = $comment->comment_author . ' commented on your post ' . get_the_title( $comment->comment_post_ID ); // WordPress Toolbar if ( 'string' === $format ) { $return = apply_filters( 'custom_filter', '<a href="' . esc_url( $custom_link ) . '" title="' . esc_attr( $custom_title ) . '">' . esc_html( $custom_text ) . '</a>', $custom_text, $custom_link ); // Deprecated BuddyBar } else { $return = apply_filters( 'custom_filter', array( 'text' => $custom_text, 'link' => $custom_link ), $custom_link, (int) $total_items, $custom_text, $custom_title ); } return $return; } } add_filter( 'bp_notifications_get_notifications_for_user', 'custom_format_buddypress_notifications', 10, 7 );
// this hooks to comment creation and saves the comment id function bp_custom_add_notification( $comment_id, $comment_object ) {
$post = get_post( $comment_object->comment_post_ID ); $author_id = $post->post_author;
bp_notifications_add_notification( array( 'user_id' => $author_id, 'item_id' => $comment_id, 'component_name' => 'custom', 'component_action' => 'custom_action', 'date_notified' => bp_core_current_time(), 'is_new' => 1, ) ); } add_action( 'wp_insert_comment', 'bp_custom_add_notification', 99, 2 );