Customising bbp_list_forums – Last Poster Block
-
Hey guys,
I am putting up a topic to show how I have created the layout on http://teamoverpowered.com/forums/
My aim when creating the theme was to try and create a last poster block that would work throughout the forums and sub forums list.
custom_bbp_list_forums – this function creates the sub forums under the main forum
public function custom_bbp_list_forums( $args = '' ) { // Define used variables $output = $sub_forums = $topic_count = $reply_count = $counts = ''; $i = 0; $count = array(); // Defaults and arguments $defaults = array ( 'before' => '', 'after' => '', 'link_before' => '', 'link_after' => '', 'count_before' => ' (', 'count_after' => ')', 'count_sep' => ', ', 'separator' => ', ', 'forum_id' => '', 'show_topic_count' => true, 'show_reply_count' => true, 'show_freshness_link' => true, ); $r = bbp_parse_args( $args, $defaults, 'list_forums' ); extract( $r, EXTR_SKIP ); // Bail if there are no subforums if ( !bbp_get_forum_subforum_count( $forum_id ) ) return; // Loop through forums and create a list $sub_forums = bbp_forum_get_subforums( $forum_id ); if ( !empty( $sub_forums ) ) { // Total count (for separator) $total_subs = count( $sub_forums ); foreach ( $sub_forums as $sub_forum ) { $i++; // Separator count // Get forum details $count = array(); $show_sep = $total_subs > $i ? $separator : ''; $permalink = bbp_get_forum_permalink( $sub_forum->ID ); $title = bbp_get_forum_title( $sub_forum->ID ); // Show topic count if ( !empty( $show_topic_count ) && !bbp_is_forum_category( $sub_forum->ID ) ) { $count['topic'] = bbp_get_forum_topic_count( $sub_forum->ID ); } // Show reply count if ( !empty( $show_reply_count ) && !bbp_is_forum_category( $sub_forum->ID ) ) { $count['reply'] = bbp_get_forum_reply_count( $sub_forum->ID ); } // Counts to show if ( !empty( $count ) ) { $counts = $count_before . implode( $count_sep, $count ) . $count_after; } if ( !empty( $show_freshness_link ) ) { $freshness_link = "" . BBP_Default::teamop_get_last_poster_block( $sub_forum->ID ) . ""; } // Build this sub forums link if ($i % 2) { $class = "odd-forum-row"; } else { $class = "even-forum-row"; } $output .= "" . $link_before . '<a href="' . $permalink . '">' . $title . '</a>' . $counts . $freshness_link . $link_after . ""; } // Output the list echo apply_filters( 'bbp_list_forums', $before . $output . $after, $args ); } }I then call that function inside loop-single-forum.php like so:
BBP_Default::custom_bbp_list_forums( array ( 'before' => '', 'after' => '', 'link_before' => '', 'link_after' => '', 'count_before' => 'Topics: ', 'count_after' => '', 'count_sep' => 'Posts: ', 'separator' => '', 'forum_id' => '', 'show_topic_count' => true, 'show_reply_count' => true, 'show_freshness_link' => true, ));Inside the first function I am also calling a second custom function called custom_get_last_poster_block
function custom_get_last_poster_block( $subforum_id = "" ) { if ( !empty( $subforum_id ) ) { $output = ""; $output .= "<a href='". bbp_get_forum_last_topic_permalink( $subforum_id ) ."'>" . bbp_get_topic_last_reply_title( bbp_get_forum_last_active_id( $subforum_id ) ) . "</a>"; $output .= ""; $output .= "by "; $output .= bbp_get_author_link( array( "post_id" => $subforum_id, "size" => 14 ) ); $output .= ""; $output .= ""; $output .= bbp_get_forum_last_active_time( $subforum_id ); $output .= ""; } else { $output = ""; $output .= "<a href='". bbp_get_forum_last_topic_permalink() ."'>" . bbp_get_topic_last_reply_title( bbp_get_forum_last_active_id() ) . "</a>"; $output .= ""; $output .= "by "; $output .= bbp_get_author_link( array( "post_id" => bbp_get_forum_last_active_id(), "size" => 14 ) ); $output .= ""; $output .= ""; $output .= bbp_get_forum_last_active_time( bbp_get_forum_last_active_id() ); $output .= ""; } return $output; }This then creates my sub forum list, I added some extra classes in I can hook onto and display:none if need. I decided when creating me theme that I would get as much information showing as possible, then just use CSS to customise it.
The final functions is one I call inside loop-single-topic.php.
public function custom_get_last_poster_block_topics() { $output .= ""; $output .= bbp_get_author_link( array( "post_id" => bbp_get_forum_last_active_id(), "size" => 14 ) ); $output .= ""; $output .= ""; $output .= bbp_get_topic_last_active_time( bbp_get_topic_last_active_id() ); $output .= ""; return $output; }This is my final function and it just adds the last poster block inside the topics list.
If you need any more help then let me know.
You must be logged in to reply to this topic.