Skip to content

Instantly share code, notes, and snippets.

@Volnus
Created February 9, 2018 15:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Volnus/85075f7455bf46723603fd2c09c3d401 to your computer and use it in GitHub Desktop.
Save Volnus/85075f7455bf46723603fd2c09c3d401 to your computer and use it in GitHub Desktop.
Improved bbPress Forums Loop
<?php
/**
* Forums Loop
*
* @package bbPress
* @subpackage Theme
*/
?>
<?php do_action( 'bbp_template_before_forums_loop' ); ?>
<?php while ( bbp_forums() ) : bbp_the_forum();
/* We print the header only if we want to show a category or if it's the first item of a no-parent forum list */
if (bbp_is_forum_category() OR !$bbp_forums_noheader)
{ ?>
<ul id="forums-list-<?php bbp_forum_id(); ?>" class="bbp-forums">
<li class="bbp-header">
<ul class="forum-titles">
<li class="bbp-forum-info"><?php if(bbp_is_forum_category()) { ?><a class="bbp-forum-title" href="<?php bbp_forum_permalink(bbp_get_forum_parent_id()); ?>"><?php bbp_forum_title(bbp_get_forum_parent_id()); ?></a><?php } else { _e( 'Forum', 'bbpress' ); } ?></li>
<li class="bbp-forum-topic-count"><?php _e( 'Topics', 'bbpress' ); ?></li>
<li class="bbp-forum-reply-count"><?php bbp_show_lead_topic() ? _e( 'Replies', 'bbpress' ) : _e( 'Posts', 'bbpress' ); ?></li>
<li class="bbp-forum-freshness"><?php _e( 'Freshness', 'bbpress' ); ?></li>
</ul>
</li><!-- .bbp-header -->
<?php } ?>
<li class="bbp-body">
<?php /* If the forum is a category, we're gonna make another loop to show its subforums and sub-subforums as if those were forums */
if(bbp_is_forum_category())
{
$temp_query = clone bbpress()->forum_query;
bbp_has_forums('post_parent='.bbp_get_forum_id());
while ( bbp_forums() ) : bbp_the_forum();
bbp_get_template_part( 'loop', 'single-forum' );
endwhile;
bbpress()->forum_query = clone $temp_query;
}
else /* Otherwise, we print the forums the normal way */
{
bbp_get_template_part( 'loop', 'single-forum' );
$bbp_forums_noheader = 1; /* This prevents the header part to be printed again on next post in the loop */
} ?>
</li><!-- .bbp-body -->
<?php /* Prints the footer only if :
- it's a category
- or if it's the last forum of a no-parent forum list
- or if the next forum in the loop is a category */
if( bbp_is_forum_category()
OR (bbpress()->forum_query->current_post+1) == bbpress()->forum_query->post_count
OR bbp_is_forum_category(bbpress()->forum_query->posts[ bbpress()->forum_query->current_post + 1 ]->ID))
{ ?>
<li class="bbp-footer">
<div class="tr">
<p class="td colspan4">&nbsp;</p>
</div><!-- .tr -->
</li><!-- .bbp-footer -->
</ul><!-- .forums-directory -->
<?php unset($bbp_forums_noheader); /* Needed if we have 2+ no-parent forums with at least 1 category between them */
} ?>
<?php endwhile; ?>
<?php do_action( 'bbp_template_after_forums_loop' ); ?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment