Custom Activity Page
-
Hello! First, what i’m using:
- WP: 3.6 beta3
- BP: 1.7.2
- BBPress: 2.3.2
- Theme: default theme (child)
What i’m trying to do is create a custom template to load activities filtered by terms. So, i taked code from activity-loop.php to create a new “custom.php” file, put it on template root and create a new page using this template.
This is the content of my custom template for pages. Sorry if it’s too long, it’s the same content of activity-loop.php, except on “activity” div:
<?php /** * Template Name: Games */ get_header( 'buddypress' ); ?> <?php do_action( 'bp_before_directory_activity_page' ); ?> <div id="content"> <div class="padder"> <?php do_action( 'bp_before_directory_activity' ); ?> <?php if ( !is_user_logged_in() ) : ?> <h3><?php _e( 'Site Activity', 'buddypress' ); ?></h3> <?php endif; ?> <?php do_action( 'bp_before_directory_activity_content' ); ?> <?php if ( is_user_logged_in() ) : ?> <?php locate_template( array( 'activity/post-form.php'), true ); ?> <?php endif; ?> <?php do_action( 'template_notices' ); ?> <div class="item-list-tabs activity-type-tabs" role="navigation"> <ul> <?php do_action( 'bp_before_activity_type_tab_all' ); ?> <li class="selected" id="activity-all"><a href="<?php bp_activity_directory_permalink(); ?>" title="<?php _e( 'The public activity for everyone on this site.', 'buddypress' ); ?>"><?php printf( __( 'All Members <span>%s</span>', 'buddypress' ), bp_get_total_member_count() ); ?></a></li> <?php if ( is_user_logged_in() ) : ?> <?php do_action( 'bp_before_activity_type_tab_friends' ); ?> <?php if ( bp_is_active( 'friends' ) ) : ?> <?php if ( bp_get_total_friend_count( bp_loggedin_user_id() ) ) : ?> <li id="activity-friends"><a href="<?php echo bp_loggedin_user_domain() . bp_get_activity_slug() . '/' . bp_get_friends_slug() . '/'; ?>" title="<?php _e( 'The activity of my friends only.', 'buddypress' ); ?>"><?php printf( __( 'My Friends <span>%s</span>', 'buddypress' ), bp_get_total_friend_count( bp_loggedin_user_id() ) ); ?></a></li> <?php endif; ?> <?php endif; ?> <?php do_action( 'bp_before_activity_type_tab_groups' ); ?> <?php if ( bp_is_active( 'groups' ) ) : ?> <?php if ( bp_get_total_group_count_for_user( bp_loggedin_user_id() ) ) : ?> <li id="activity-groups"><a href="<?php echo bp_loggedin_user_domain() . bp_get_activity_slug() . '/' . bp_get_groups_slug() . '/'; ?>" title="<?php _e( 'The activity of groups I am a member of.', 'buddypress' ); ?>"><?php printf( __( 'My Groups <span>%s</span>', 'buddypress' ), bp_get_total_group_count_for_user( bp_loggedin_user_id() ) ); ?></a></li> <?php endif; ?> <?php endif; ?> <?php do_action( 'bp_before_activity_type_tab_favorites' ); ?> <?php if ( bp_get_total_favorite_count_for_user( bp_loggedin_user_id() ) ) : ?> <li id="activity-favorites"><a href="<?php echo bp_loggedin_user_domain() . bp_get_activity_slug() . '/favorites/'; ?>" title="<?php _e( "The activity I've marked as a favorite.", 'buddypress' ); ?>"><?php printf( __( 'My Favorites <span>%s</span>', 'buddypress' ), bp_get_total_favorite_count_for_user( bp_loggedin_user_id() ) ); ?></a></li> <?php endif; ?> <?php do_action( 'bp_before_activity_type_tab_mentions' ); ?> <li id="activity-mentions"><a href="<?php echo bp_loggedin_user_domain() . bp_get_activity_slug() . '/mentions/'; ?>" title="<?php _e( 'Activity that I have been mentioned in.', 'buddypress' ); ?>"><?php _e( 'Mentions', 'buddypress' ); ?><?php if ( bp_get_total_mention_count_for_user( bp_loggedin_user_id() ) ) : ?> <strong><?php printf( __( '<span>%s new</span>', 'buddypress' ), bp_get_total_mention_count_for_user( bp_loggedin_user_id() ) ); ?></strong><?php endif; ?></a></li> <?php endif; ?> <?php do_action( 'bp_activity_type_tabs' ); ?> </ul> </div><!-- .item-list-tabs --> <div class="item-list-tabs no-ajax" id="subnav" role="navigation"> <ul> <li class="feed"><a href="<?php bp_sitewide_activity_feed_link(); ?>" title="<?php _e( 'RSS Feed', 'buddypress' ); ?>"><?php _e( 'RSS', 'buddypress' ); ?></a></li> <?php do_action( 'bp_activity_syndication_options' ); ?> <li id="activity-filter-select" class="last"> <label for="activity-filter-by"><?php _e( 'Show:', 'buddypress' ); ?></label> <select id="activity-filter-by"> <option value="-1"><?php _e( 'Everything', 'buddypress' ); ?></option> <option value="activity_update"><?php _e( 'Updates', 'buddypress' ); ?></option> <?php if ( bp_is_active( 'blogs' ) ) : ?> <option value="new_blog_post"><?php _e( 'Posts', 'buddypress' ); ?></option> <option value="new_blog_comment"><?php _e( 'Comments', 'buddypress' ); ?></option> <?php endif; ?> <?php if ( bp_is_active( 'forums' ) ) : ?> <option value="new_forum_topic"><?php _e( 'Forum Topics', 'buddypress' ); ?></option> <option value="new_forum_post"><?php _e( 'Forum Replies', 'buddypress' ); ?></option> <?php endif; ?> <?php if ( bp_is_active( 'groups' ) ) : ?> <option value="created_group"><?php _e( 'New Groups', 'buddypress' ); ?></option> <option value="joined_group"><?php _e( 'Group Memberships', 'buddypress' ); ?></option> <?php endif; ?> <?php if ( bp_is_active( 'friends' ) ) : ?> <option value="friendship_accepted,friendship_created"><?php _e( 'Friendships', 'buddypress' ); ?></option> <?php endif; ?> <option value="new_member"><?php _e( 'New Members', 'buddypress' ); ?></option> <?php do_action( 'bp_activity_filter_options' ); ?> </select> </li> </ul> </div><!-- .item-list-tabs --> <?php do_action( 'bp_before_directory_activity_list' ); ?> <div class="activity" role="main"> <?php $myslug = the_slug(); if ( bp_has_activities('search_terms='.$myslug.'') ) : do_action( 'bp_before_activity_loop' ); /*if ( bp_has_activities( bp_ajax_querystring( 'activity' ) ) ) : */ /* Show pagination if JS is not enabled, since the "Load More" link will do nothing */ ?> <noscript> <div class="pagination"> <div class="pag-count"><?php bp_activity_pagination_count(); ?></div> <div class="pagination-links"><?php bp_activity_pagination_links(); ?></div> </div> </noscript> <?php if ( empty( $_POST['page'] ) ) : ?> <ul id="activity-stream" class="activity-list item-list"> <?php endif; while ( bp_activities() ) : bp_the_activity(); locate_template( array( 'activity/entry.php' ), true, false ); endwhile; if ( bp_activity_has_more_items() ) : ?> <li class="load-more"> <a href="#more"><?php _e( 'Load More', 'buddypress' ); ?></a> </li> <?php endif; if ( empty( $_POST['page'] ) ) : ?> </ul> <?php endif; else : ?> <div id="message" class="info"> <p><?php _e( 'Sorry, there was no activity found. Please try a different filter.', 'buddypress' ); ?></p> </div> <?php endif; do_action( 'bp_after_activity_loop' ); ?> <form action="" name="activity-loop-form" id="activity-loop-form" method="post"> <?php wp_nonce_field( 'activity_filter', '_wpnonce_activity_filter' ); ?> </form> </div><!-- .activity --> <?php do_action( 'bp_after_directory_activity_list' ); ?> <?php do_action( 'bp_directory_activity_content' ); ?> <?php do_action( 'bp_after_directory_activity_content' ); ?> <?php do_action( 'bp_after_directory_activity' ); ?> </div><!-- .padder --> </div><!-- #content --> <?php do_action( 'bp_after_directory_activity_page' ); ?> <?php get_sidebar( 'buddypress' ); ?> <?php get_footer( 'buddypress' ); ?>
My idea is to load different stream for each game, so the page “Chrono Trigger (SNES)” would load activities containing terms like “Chrono Trigger”. I don’t know the best way to do this, so tried to get page slug and use as filter:
$myslug = the_slug(); // using a function to get slug if ( bp_has_activities('search_terms='.$myslug.'') ) : do_action( 'bp_before_activity_loop' ); /*if ( bp_has_activities( bp_ajax_querystring( 'activity' ) ) ) : */ /* Show pagination if JS is not enabled, since the "Load More" link will do nothing */ ?> <noscript> <div class="pagination"> <div class="pag-count"><?php bp_activity_pagination_count(); ?></div> <div class="pagination-links"><?php bp_activity_pagination_links(); ?></div> </div> </noscript> <?php if ( empty( $_POST['page'] ) ) : ?> <ul id="activity-stream" class="activity-list item-list"> <?php endif; while ( bp_activities() ) : bp_the_activity(); locate_template( array( 'activity/entry.php' ), true, false ); endwhile; if ( bp_activity_has_more_items() ) : ?> <li class="load-more"> <a href="#more"><?php _e( 'Load More', 'buddypress' ); ?></a> </li> <?php endif; if ( empty( $_POST['page'] ) ) : ?> </ul> <?php endif; else : ?> <div id="message" class="info"> <p><?php _e( 'Sorry, there was no activity found. Please try a different filter.', 'buddypress' ); ?></p> </div> <?php endif; do_action( 'bp_after_activity_loop' ); ?> <form action="" name="activity-loop-form" id="activity-loop-form" method="post"> <?php wp_nonce_field( 'activity_filter', '_wpnonce_activity_filter' ); ?> </form> </div><!-- .activity -->
This is the function to get slug:
function the_slug() { $post_data = get_post($post->ID, ARRAY_A); $slug = $post_data['post_name']; return $slug; }
It works, but only with pages containing the very same slug (for example, if the slug is “Chrono”, it gets all activities with Chrono, but “chrono-trigger” don’t work). There is a better approach to filter this activity stream, i suppose my method is a mess.
I’m begginer with Buddypress so any help is appreciated.
- The topic ‘Custom Activity Page’ is closed to new replies.