Skip to:
Content
Pages
Categories
Search
Top
Bottom

Custom Activity Page

  • Avatar of Daniel_Iceman
    Daniel Lemes
    Participant

    @daniel_iceman

    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.

Viewing 1 replies (of 1 total)
  • Avatar of Daniel_Iceman
    Daniel Lemes
    Participant

    @daniel_iceman

    Well, i don’t know how i didn’t think about it before. Pretty simple, just changing the function which gets the slug. So:

    function the_slug() {
        $post_data = get_post($post->ID, ARRAY_A);
        $slug = $post_data['post_name'];
    	$slug = str_replace(array('-'),' ',$slug);
    	return $slug; 
    }

    It gives me the slug as nice filtering terms like “chrono trigger” (space instead of -). If the page slug is “chrono-trigger-snes” i still having a problem, but i will use another string replace to get rid of this.

    Any suggestion or opinion about performance (other faster/lighter way)?

Viewing 1 replies (of 1 total)

You must be logged in to reply to this topic.