bbp_has_forums( mixed $args = '' )
The main forum loop.
Description
WordPress makes this easy for us.
Parameters
- $args
-
(Optional) All the arguments supported by WP_Query
Default value: ''
Return
(object) Multidimensional array of forum information
Source
File: bp-forums/forums/template.php
function bbp_has_forums( $args = '' ) {
global $wp_rewrite;
// Forum archive only shows root
if ( bbp_is_forum_archive() ) {
$default_post_parent = 0;
// User subscriptions shows any
} elseif ( bbp_is_subscriptions() ) {
$default_post_parent = 'any';
// Could be anything, so look for possible parent ID
} else {
$default_post_parent = bbp_get_forum_id();
}
// Parse arguments with default forum query for most circumstances
$bbp_f = bbp_parse_args( $args, array(
'post_type' => bbp_get_forum_post_type(),
'post_parent' => $default_post_parent,
'post_status' => bbp_get_public_status_id(),
'posts_per_page' => bbp_get_forums_per_page(),
'ignore_sticky_posts' => true,
'orderby' => 'menu_order title',
'order' => 'ASC',
'paged' => bbp_get_paged(), // Page Number
), 'has_forums' );
// Run the query
$bbp = bbpress();
$bbp->forum_query = new WP_Query( $bbp_f );
// Add pagination values to query object
$bbp->forum_query->posts_per_page = $bbp_f['posts_per_page'];
$bbp->forum_query->paged = $bbp_f['paged'];
// Only add pagination if query returned results
if ( ( (int) $bbp->forum_query->post_count || (int) $bbp->forum_query->found_posts ) && (int) $bbp->forum_query->posts_per_page ) {
// Limit the number of forums shown based on maximum allowed pages
if ( ( !empty( $bbp_f['max_num_pages'] ) ) && $bbp->forum_query->found_posts > $bbp->forum_query->max_num_pages * $bbp->forum_query->post_count )
$bbp->forum_query->found_posts = $bbp->forum_query->max_num_pages * $bbp->forum_query->post_count;
$base = $base = add_query_arg( 'paged', '%#%', bbp_get_forums_url() );
// Pagination settings with filter
$bbp_topic_pagination = apply_filters( 'bbp_forum_pagination', array (
'base' => $base,
'format' => '',
'total' => $bbp_f['posts_per_page'] === $bbp->forum_query->found_posts ? 1 : ceil( (int) $bbp->forum_query->found_posts / (int) $bbp_f['posts_per_page'] ),
'current' => (int) $bbp->forum_query->paged,
'prev_text' => is_rtl() ? '→' : '←',
'next_text' => is_rtl() ? '←' : '→',
'mid_size' => 1
) );
// Add pagination to query object
$bbp->forum_query->pagination_links = paginate_links( $bbp_topic_pagination );
// Remove first page from pagination
$bbp->forum_query->pagination_links = str_replace( $wp_rewrite->pagination_base . "/1/'", "'", $bbp->forum_query->pagination_links );
}
return apply_filters( 'bbp_has_forums', $bbp->forum_query->have_posts(), $bbp->forum_query );
}
Changelog
| Version | Description |
|---|---|
| bbPress (r2464) | Introduced. |
Questions?
We're always happy to help with code or other questions you might have! Search our developer docs, contact support, or connect with our sales team.