bbp_has_search_results( mixed $args = '' )
The main search loop. WordPress does the heavy lifting.
Description
Parameters
- $args
-
(Optional) All the arguments supported by WP_Query
Default value: ''
Return
(object) Multidimensional array of search information
Source
File: bp-forums/search/template.php
function bbp_has_search_results( $args = '' ) {
global $wp_rewrite;
/** Defaults **************************************************************/
$default_post_type = array( bbp_get_forum_post_type(), bbp_get_topic_post_type(), bbp_get_reply_post_type() );
// Default query args
$default = array(
'post_type' => $default_post_type, // Forums, topics, and replies
'posts_per_page' => bbp_get_replies_per_page(), // This many
'paged' => bbp_get_paged(), // On this page
'orderby' => 'date', // Sorted by date
'order' => 'DESC', // Most recent first
'ignore_sticky_posts' => true, // Stickies not supported
's' => bbp_get_search_terms(), // This is a search
);
// What are the default allowed statuses (based on user caps)
if ( bbp_get_view_all() ) {
// Default view=all statuses
$post_statuses = array(
bbp_get_public_status_id(),
bbp_get_closed_status_id(),
bbp_get_spam_status_id(),
bbp_get_trash_status_id()
);
// Add support for private status
if ( current_user_can( 'read_private_topics' ) ) {
$post_statuses[] = bbp_get_private_status_id();
}
// Join post statuses together
$default['post_status'] = implode( ',', $post_statuses );
// Lean on the 'perm' query var value of 'readable' to provide statuses
} else {
$default['perm'] = 'readable';
}
/** Setup *****************************************************************/
// Parse arguments against default values
$r = bbp_parse_args( $args, $default, 'has_search_results' );
// Get Forums
$bbp = bbpress();
// Call the query
if ( ! empty( $r['s'] ) ) {
$bbp->search_query = new WP_Query( $r );
}
// Add pagination values to query object
$bbp->search_query->posts_per_page = $r['posts_per_page'];
$bbp->search_query->paged = $r['paged'];
// Never home, regardless of what parse_query says
$bbp->search_query->is_home = false;
// Only add pagination is query returned results
if ( ! empty( $bbp->search_query->found_posts ) && ! empty( $bbp->search_query->posts_per_page ) ) {
// Array of arguments to add after pagination links
$add_args = array();
// If pretty permalinks are enabled, make our pagination pretty
if ( $wp_rewrite->using_permalinks() ) {
// Shortcode territory
if ( is_page() || is_single() ) {
$base = trailingslashit( get_permalink() );
// Default search location
} else {
$base = trailingslashit( bbp_get_search_results_url() );
}
// Add pagination base
$base = $base . user_trailingslashit( $wp_rewrite->pagination_base . '/%#%/' );
// Unpretty permalinks
} else {
$base = add_query_arg( 'paged', '%#%' );
}
// Add args
if ( bbp_get_view_all() ) {
$add_args['view'] = 'all';
}
// Add pagination to query object
$bbp->search_query->pagination_links = paginate_links(
apply_filters( 'bbp_search_results_pagination', array(
'base' => $base,
'format' => '',
'total' => ceil( (int) $bbp->search_query->found_posts / (int) $r['posts_per_page'] ),
'current' => (int) $bbp->search_query->paged,
'prev_text' => is_rtl() ? '→' : '←',
'next_text' => is_rtl() ? '←' : '→',
'mid_size' => 1,
'add_args' => $add_args,
) )
);
// Remove first page from pagination
if ( $wp_rewrite->using_permalinks() ) {
$bbp->search_query->pagination_links = str_replace( $wp_rewrite->pagination_base . '/1/', '', $bbp->search_query->pagination_links );
} else {
$bbp->search_query->pagination_links = str_replace( '&paged=1', '', $bbp->search_query->pagination_links );
}
}
// Return object
return apply_filters( 'bbp_has_search_results', $bbp->search_query->have_posts(), $bbp->search_query );
}
Changelog
| Version | Description |
|---|---|
| bbPress (r4579) | 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.