bp_blogs_sync_add_from_activity_comment( int $comment_id, array $params, object $parent_activity )
Syncs activity comments and posts them back as blog comments.
Description
Note: This is only a one-way sync – activity comments -> blog comment.
For blog post -> activity comment, see bp_activity_post_type_comment().
Parameters
- $comment_id
-
(Required) The activity ID for the posted activity comment.
- $params
-
(Required) Parameters for the activity comment.
- $parent_activity
-
(Required) Parameters of the parent activity item (in this case, the blog post).
Source
File: bp-blogs/bp-blogs-activity.php
function bp_blogs_sync_add_from_activity_comment( $comment_id, $params, $parent_activity ) { // if parent activity isn't a post type having the buddypress-activity support, stop now! if ( ! bp_activity_type_supports( $parent_activity->type, 'post-type-comment-tracking' ) ) { return; } // If activity comments are disabled for blog posts, stop now! if ( bp_disable_blogforum_comments() ) { return; } // Do not sync if the activity comment was marked as spam. $activity = new BP_Activity_Activity( $comment_id ); if ( $activity->is_spam ) { return; } // Get userdata. if ( $params['user_id'] == bp_loggedin_user_id() ) { $user = buddypress()->loggedin_user->userdata; } else { $user = bp_core_get_core_userdata( $params['user_id'] ); } // Get associated post type and set default comment parent $post_type = bp_activity_post_type_get_tracking_arg( $parent_activity->type, 'post_type' ); $comment_parent = 0; // See if a parent WP comment ID exists. if ( ! empty( $params['parent_id'] ) && ! empty( $post_type ) ) { $comment_parent = bp_activity_get_meta( $params['parent_id'], "bp_blogs_{$post_type}_comment_id" ); } // Comment args. $args = array( 'comment_post_ID' => $parent_activity->secondary_item_id, 'comment_author' => bp_core_get_user_displayname( $params['user_id'] ), 'comment_author_email' => $user->user_email, 'comment_author_url' => bp_core_get_user_domain( $params['user_id'], $user->user_nicename, $user->user_login ), 'comment_content' => $params['content'], 'comment_type' => '', // Could be interesting to add 'buddypress' here... 'comment_parent' => (int) $comment_parent, 'user_id' => $params['user_id'], 'comment_approved' => 1 ); // Prevent separate activity entry being made. remove_action( 'comment_post', 'bp_activity_post_type_comment', 10 ); // Handle multisite. switch_to_blog( $parent_activity->item_id ); // Handle timestamps for the WP comment after we've switched to the blog. $args['comment_date'] = current_time( 'mysql' ); $args['comment_date_gmt'] = current_time( 'mysql', 1 ); // Post the comment. $post_comment_id = wp_insert_comment( $args ); // Add meta to comment. add_comment_meta( $post_comment_id, 'bp_activity_comment_id', $comment_id ); // Add meta to activity comment. if ( ! empty( $post_type ) ) { bp_activity_update_meta( $comment_id, "bp_blogs_{$post_type}_comment_id", $post_comment_id ); } // Resave activity comment with WP comment permalink. // // in bp_blogs_activity_comment_permalink(), we change activity comment // permalinks to use the post comment link // // @todo since this is done after AJAX posting, the activity comment permalink // doesn't change on the front end until the next page refresh. $resave_activity = new BP_Activity_Activity( $comment_id ); $resave_activity->primary_link = get_comment_link( $post_comment_id ); /** * Now that the activity id exists and the post comment was created, we don't need to update * the content of the comment as there are no chances it has evolved. */ remove_action( 'bp_activity_before_save', 'bp_blogs_sync_activity_edit_to_post_comment', 20 ); $resave_activity->save(); // Add the edit activity comment hook back. add_action( 'bp_activity_before_save', 'bp_blogs_sync_activity_edit_to_post_comment', 20 ); // Multisite again! restore_current_blog(); // Add the comment hook back. add_action( 'comment_post', 'bp_activity_post_type_comment', 10, 2 ); /** * Fires after activity comments have been synced and posted as blog comments. * * @since BuddyPress 2.0.0 * * @param int $comment_id The activity ID for the posted activity comment. * @param array $args Array of args used for the comment syncing. * @param object $parent_activity Parameters of the blog post parent activity item. * @param object $user User data object for the blog comment. */ do_action( 'bp_blogs_sync_add_from_activity_comment', $comment_id, $args, $parent_activity, $user ); }
Changelog
Version | Description |
---|---|
BuddyPress 2.5.0 Allow custom post types to sync their comments with activity ones | BuddyPress 2.5.0 Allow custom post types to sync their comments with activity ones |
BuddyPress 2.0.0 | Introduced. |
Questions?
We're always happy to help with code or other questions you might have! Search our developer docs, contact support, or connect with our sales team.