Activity Loop
The activity loop can be used to output a list of sitewide, member or member’s friends activity.
Standard Loop
<?php if ( bp_has_activities( bp_ajax_querystring( 'activity' ) ) ) : ?> <?php while ( bp_activities() ) : bp_the_activity(); ?> <?php locate_template( array( 'activity/entry.php' ), true, false ); ?> <?php endwhile; ?> <?php endif; ?>
Accepted Parameters
The bp_has_activities()
function will accept a number of parameters that will manipulate the data being returned.
-
scope optional
Pre-defined filtering of the activity stream. Show only activity for the scope you pass (based on the logged in user or a user_id you pass).
- Accepted arguments:
just-me
,friends
,groups
,favorites
,mentions
- Default value:
$bp->current_action
- Accepted arguments:
-
display_comments optional
Whether or not to display comments along with activity items. Threaded will show comments threaded under the activity. Stream will show comments within the actual stream in chronological order along with activity items.
- Accepted arguments:
false
,threaded
,stream
- Default value:
threaded
- Accepted arguments:
-
include optional
Pass an activity_id or string of comma separated ids to show only these entries.
- Default value:
false
- Default value:
-
sort optional
Sort the stream chronologically ascending or descending.
- Accepted arguments:
ASC
,DESC
- Default value:
DESC
- Accepted arguments:
-
per_page optional
Number of activity items to show per page.
- Default value:
20
- Default value:
-
page optional
Which page to return based on the number per page value.
- Default value:
1
- Default value:
-
max optional
The limit on number of activity items that can be returned
- Default value:
false
- Default value:
-
show_hidden optional
Show items that have been hidden site wide? For example private or hidden group posts.
- Default value:
false
- Default value:
-
search_terms optional
Return only activity items that match these search terms
- Default value:
false
- Default value:
Filtering Options
Using filtering you can use the activity loop to return any specific information that has been recorded on the entire site. For example you could use it to return all of the latest comments site wide.
Listed below are the parameters you can use to filter the activity stream.
-
user_id optional
Limit activity items to a specific user ID. You can also pass in a comma separated string of user ids – see example below.
- Default value:
false
(no filter)
- Default value:
-
object optional
The object type to filter on (can be any active component ID as well as custom component ID’s)
- Example arguments:
groups
,friends
,profile
,status
,blogs
- Default value:
false
(no filter)
- Example arguments:
-
action optional
The action type to filter on (can be any active component action as well as custom component actions)
- Example arguments:
new_forum_post
,new_blog_comment
new_blog_post
,friendship_created
,joined_group
,created_group
,new_forum_topic
,activity_update
- Default value:
false
(no filter)
- Example arguments:
-
primary_id optional
The ID to filter on for a specific object. For example if you used
groups
as the object you could pass agroup_id
as theprimary_id
and restrict to that group.- Possible arguments: Any specific object ID
- Default value:
false
(no filter)
-
secondary_id optional
The secondary ID to filter on for a specific object. For example if you used
blogs
as the object you could pass ablog_id
as theprimary_id
and apost_id
as thesecondary_id
the list all comments for that post usingnew_blog_comment
as theaction
.- Possible arguments: Any specific object ID
- Default value:
false
(no filter)
Filtering Examples
Filtering the activity loop to show only activity updates in the activity stream:
<?php if ( bp_has_activities( bp_ajax_querystring( 'activity' ) . '&action=activity_update' ) ) : ?>
Use ‘user_id’ to filter the activity loop to show only you and your friends in the activity stream:
<?php // best practice is to create a function in another file, but this will work... $friends = friends_get_friend_user_ids( bp_loggedin_user_id() ); $friends[] = bp_loggedin_user_id(); $friends_and_me = implode( ',', (array) $friends ); $friends_and_me = '&user_id=' . $friends_and_me; ?> <?php if ( bp_has_activities( bp_ajax_querystring( 'activity' ) . $friends_and_me) ) : ?>
Adding Commenting Support
Adding commenting support to your activity loop is pretty straightforward. You will first need to pass the “display_comments=threaded” parameter to your loop (see above).
Second you need to wrap all your activity code in a div with an “activity” class in order to make the ajax comments to work.
Finally, add the following code inside your loop, below “activity-content” div and above the closing list item tag:
<div class="activity-meta"> <?php if ( bp_activity_can_comment() ) : ?> <a href="<?php bp_get_activity_comment_link(); ?>" class="button acomment-reply bp-primary-action" id="acomment-comment-<?php bp_activity_id(); ?>"><?php printf( __( 'Comment <span>%s</span>', 'buddypress' ), bp_activity_get_comment_count() ); ?></a> <?php endif; ?> <?php if ( bp_activity_can_favorite() ) : ?> <?php if ( !bp_get_activity_is_favorite() ) : ?> <a href="<?php bp_activity_favorite_link(); ?>" class="button fav bp-secondary-action" title="<?php esc_attr_e( 'Mark as Favorite', 'buddypress' ); ?>"><?php _e( 'Favorite', 'buddypress' ) ?></a> <?php else : ?> <a href="<?php bp_activity_unfavorite_link(); ?>" class="button unfav bp-secondary-action" title="<?php esc_attr_e( 'Remove Favorite', 'buddypress' ); ?>"><?php _e( 'Remove Favorite', 'buddypress' ) ?></a> <?php endif; ?> <?php endif; ?> <?php if ( bp_activity_user_can_delete() ) bp_activity_delete_link(); ?> <?php do_action( 'bp_activity_entry_meta' ); ?> </div> <?php endif; ?> </div> <?php do_action( 'bp_before_activity_entry_comments' ); ?> <?php if ( ( is_user_logged_in() && bp_activity_can_comment() ) || bp_activity_get_comment_count() ) : ?> <div class="activity-comments"> <?php bp_activity_comments(); ?> <?php if ( is_user_logged_in() ) : ?> <form action="<?php bp_activity_comment_form_action(); ?>" method="post" id="ac-form-<?php bp_activity_id(); ?>" class="ac-form"<?php bp_activity_comment_form_nojs_display(); ?>> <div class="ac-reply-avatar"><?php bp_loggedin_user_avatar( 'width=' . BP_AVATAR_THUMB_WIDTH . '&height=' . BP_AVATAR_THUMB_HEIGHT ); ?></div> <div class="ac-reply-content"> <div class="ac-textarea"> <textarea id="ac-input-<?php bp_activity_id(); ?>" class="ac-input" name="ac_input_<?php bp_activity_id(); ?>"></textarea> </div> <input type="submit" name="ac_form_submit" value="<?php _e( 'Post', 'buddypress' ); ?>" /> <?php _e( 'or press esc to cancel.', 'buddypress' ); ?> <input type="hidden" name="comment_form_id" value="<?php bp_activity_id(); ?>" /> </div> <?php do_action( 'bp_activity_entry_comments' ); ?> <?php wp_nonce_field( 'new_activity_comment', '_wpnonce_new_activity_comment' ); ?> </form> <?php endif; ?> </div>