bp_activity_transition_post_type_comment_status( string $new_status, string $old_status, WP_Comment $comment )
When a post type comment status transition occurs, update the relevant activity’s status.
Description
Parameters
- $new_status
-
(Required) New comment status.
- $old_status
-
(Required) Previous comment status.
- $comment
-
(Required) Comment data.
Source
File: bp-activity/bp-activity-functions.php
function bp_activity_transition_post_type_comment_status( $new_status, $old_status, $comment ) { $post_type = get_post_type( $comment->comment_post_ID ); if ( ! $post_type ) { return; } // Get the post type tracking args. $activity_post_object = bp_activity_get_post_type_tracking_args( $post_type ); // Bail if the activity type does not exist if ( empty( $activity_post_object->comments_tracking->action_id ) ) { return false; // Set the $activity_comment_object } else { $activity_comment_object = $activity_post_object->comments_tracking; } // Init an empty activity ID $activity_id = 0; /** * Activity currently doesn't have any concept of a trash, or an unapproved/approved state. * * If a blog comment transitions to a "delete" or "hold" status, delete the activity item. * If a blog comment transitions to trashed, or spammed, mark the activity as spam. * If a blog comment transitions to approved (and the activity exists), mark the activity as ham. * If a blog comment transitions to unapproved (and the activity exists), mark the activity as spam. * Otherwise, record the comment into the activity feed. */ // This clause handles delete/hold. if ( in_array( $new_status, array( 'delete', 'hold' ) ) ) { return bp_activity_post_type_remove_comment( $comment->comment_ID, $activity_post_object ); // These clauses handle trash, spam, and un-spams. } elseif ( in_array( $new_status, array( 'trash', 'spam', 'unapproved' ) ) ) { $action = 'spam_activity'; } elseif ( 'approved' == $new_status ) { $action = 'ham_activity'; } // Get the activity if ( bp_disable_blogforum_comments() ) { $activity_id = bp_activity_get_activity_id( array( 'component' => $activity_comment_object->component_id, 'item_id' => get_current_blog_id(), 'secondary_item_id' => $comment->comment_ID, 'type' => $activity_comment_object->action_id, ) ); } else { $activity_id = get_comment_meta( $comment->comment_ID, 'bp_activity_comment_id', true ); } /** * Leave a chance to plugins to manage activity comments differently. * * @since BuddyPress 2.5.0 * * @param bool $value True to override BuddyPress management. * @param string $post_type The post type name. * @param int $activity_id The post type activity (0 if not found). * @param string $new_status The new status of the post type comment. * @param string $old_status The old status of the post type comment. * @param WP_Comment $comment Comment data. */ if ( true === apply_filters( 'bp_activity_pre_transition_post_type_comment_status', false, $post_type, $activity_id, $new_status, $old_status, $comment ) ) { return false; } // Check activity item exists if ( empty( $activity_id ) ) { // If no activity exists, but the comment has been approved, record it into the activity table. if ( 'approved' == $new_status ) { return bp_activity_post_type_comment( $comment->comment_ID, true, $activity_post_object ); } return; } // Create an activity object $activity = new BP_Activity_Activity( $activity_id ); if ( empty( $activity->component ) ) { return; } // Spam/ham the activity if it's not already in that state if ( 'spam_activity' === $action && ! $activity->is_spam ) { bp_activity_mark_as_spam( $activity ); } elseif ( 'ham_activity' == $action) { bp_activity_mark_as_ham( $activity ); } // Add "new_post_type_comment" to the whitelisted activity types, so that the activity's Akismet history is generated $post_type_comment_action = $activity_comment_object->action_id; $comment_akismet_history = function ( $activity_types ) use ( $post_type_comment_action ) { $activity_types[] = $post_type_comment_action; return $activity_types; }; add_filter( 'bp_akismet_get_activity_types', $comment_akismet_history ); // Make sure the activity change won't edit the comment if sync is on remove_action( 'bp_activity_before_save', 'bp_blogs_sync_activity_edit_to_post_comment', 20 ); // Save the updated activity $activity->save(); // Restore the action add_action( 'bp_activity_before_save', 'bp_blogs_sync_activity_edit_to_post_comment', 20 ); // Remove the "new_blog_comment" activity type whitelist so we don't break anything remove_filter( 'bp_akismet_get_activity_types', $comment_akismet_history ); }
Changelog
Version | Description |
---|---|
BuddyPress 2.5.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.