BP_Blogs_Template
The main blog template loop class.
Description Description
Responsible for loading a group of blogs into a loop for display.
Source Source
File: bp-blogs/classes/class-bp-blogs-template.php
class BP_Blogs_Template {
/**
* The loop iterator.
*
* @var int
*/
public $current_blog = -1;
/**
* The number of blogs returned by the paged query.
*
* @var int
*/
public $blog_count = 0;
/**
* Array of blogs located by the query..
*
* @var array
*/
public $blogs = array();
/**
* The blog object currently being iterated on.
*
* @var object
*/
public $blog;
/**
* A flag for whether the loop is currently being iterated.
*
* @var bool
*/
public $in_the_loop = false;
/**
* The page number being requested.
*
* @var int
*/
public $pag_page = 1;
/**
* The number of items being requested per page.
*
* @var int
*/
public $pag_num = 20;
/**
* An HTML string containing pagination links.
*
* @var string
*/
public $pag_links = '';
/**
* The total number of blogs matching the query parameters.
*
* @var int
*/
public $total_blog_count = 0;
/**
* Constructor method.
*
* @see BP_Blogs_Blog::get() for a description of parameters.
*
* @param string $type See {@link BP_Blogs_Blog::get()}.
* @param string $page See {@link BP_Blogs_Blog::get()}.
* @param string $per_page See {@link BP_Blogs_Blog::get()}.
* @param string $max See {@link BP_Blogs_Blog::get()}.
* @param string $user_id See {@link BP_Blogs_Blog::get()}.
* @param string $search_terms See {@link BP_Blogs_Blog::get()}.
* @param string $page_arg The string used as a query parameter in
* pagination links. Default: 'bpage'.
* @param bool $update_meta_cache Whether to pre-fetch metadata for
* queried blogs.
* @param array|bool $include_blog_ids Array of blog IDs to include.
*/
public function __construct( $type, $page, $per_page, $max, $user_id, $search_terms, $page_arg = 'bpage', $update_meta_cache = true, $include_blog_ids = false ) {
$this->pag_arg = sanitize_key( $page_arg );
$this->pag_page = bp_sanitize_pagination_arg( $this->pag_arg, $page );
$this->pag_num = bp_sanitize_pagination_arg( 'num', $per_page );
// Backwards compatibility support for blogs by first letter.
if ( ! empty( $_REQUEST['letter'] ) ) {
$this->blogs = BP_Blogs_Blog::get_by_letter( $_REQUEST['letter'], $this->pag_num, $this->pag_page );
// Typical blogs query.
} else {
$this->blogs = bp_blogs_get_blogs( array(
'type' => $type,
'per_page' => $this->pag_num,
'page' => $this->pag_page,
'user_id' => $user_id,
'search_terms' => $search_terms,
'update_meta_cache' => $update_meta_cache,
'include_blog_ids' => $include_blog_ids,
) );
}
// Set the total blog count.
if ( empty( $max ) || ( $max >= (int) $this->blogs['total'] ) ) {
$this->total_blog_count = (int) $this->blogs['total'];
} else {
$this->total_blog_count = (int) $max;
}
// Set the blogs array (to loop through later.
$this->blogs = $this->blogs['blogs'];
// Get the current blog count to compare maximum against.
$blog_count = count( $this->blogs );
// Set the current blog count.
if ( empty( $max ) || ( $max >= (int) $blog_count ) ) {
$this->blog_count = (int) $blog_count;
} else {
$this->blog_count = (int) $max;
}
// Build pagination links based on total blogs and current page number.
if ( ! empty( $this->total_blog_count ) && ! empty( $this->pag_num ) ) {
$this->pag_links = paginate_links( array(
'base' => add_query_arg( $this->pag_arg, '%#%' ),
'format' => '',
'total' => ceil( (int) $this->total_blog_count / (int) $this->pag_num ),
'current' => (int) $this->pag_page,
'prev_text' => _x( '←', 'Blog pagination previous text', 'buddypress' ),
'next_text' => _x( '→', 'Blog pagination next text', 'buddypress' ),
'mid_size' => 1,
'add_args' => array(),
) );
}
}
/**
* Whether there are blogs available in the loop.
*
* @see bp_has_blogs()
*
* @return bool True if there are items in the loop, otherwise false.
*/
public function has_blogs() {
return (bool) ! empty( $this->blog_count );
}
/**
* Set up the next blog and iterate index.
*
* @return object The next blog to iterate over.
*/
public function next_blog() {
$this->current_blog++;
$this->blog = $this->blogs[ $this->current_blog ];
return $this->blog;
}
/**
* Rewind the blogs and reset blog index.
*/
public function rewind_blogs() {
$this->current_blog = -1;
if ( $this->blog_count > 0 ) {
$this->blog = $this->blogs[0];
}
}
/**
* Whether there are blogs left in the loop to iterate over.
*
* This method is used by {@link bp_blogs()} as part of the while loop
* that controls iteration inside the blogs loop, eg:
* while ( bp_blogs() ) { ...
*
* @see bp_blogs()
*
* @return bool True if there are more blogs to show, otherwise false.
*/
public function blogs() {
if ( ( $this->current_blog + 1 ) < $this->blog_count ) {
return true;
} elseif ( ( $this->current_blog + 1 ) === $this->blog_count ) {
/**
* Fires right before the rewinding of blogs listing after all are shown.
*
* @since 1.5.0
*/
do_action( 'blog_loop_end' );
// Do some cleaning up after the loop.
$this->rewind_blogs();
}
$this->in_the_loop = false;
return false;
}
/**
* Set up the current blog inside the loop.
*
* Used by {@link bp_the_blog()} to set up the current blog data while
* looping, so that template tags used during that iteration make
* reference to the current blog.
*
* @see bp_the_blog()
*/
public function the_blog() {
$this->in_the_loop = true;
$this->blog = $this->next_blog();
// Loop has just started.
if ( 0 === $this->current_blog ) {
/**
* Fires if on the first blog in the loop.
*
* @since 1.5.0
*/
do_action( 'blog_loop_start' );
}
}
}
Methods Methods
- __construct — Constructor method.
- blogs — Whether there are blogs left in the loop to iterate over.
- has_blogs — Whether there are blogs available in the loop.
- next_blog — Set up the next blog and iterate index.
- rewind_blogs — Rewind the blogs and reset blog index.
- the_blog — Set up the current blog inside the loop.