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.