Limiting Search Results to the Active bbPress Forum
Some bbPress forum installs are huge. Perhaps you’d like to help out your visitors by limiting the on-page search to the Forum currently being viewed. We can customize the output of get_search_form()
(which includes the WordPress Search (not bbPress) Widget) to only consider the bbPress Forum currently on display when searching:
All hooks should be added to your custom SearchWP Customizations Plugin.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
// Customize native WordPress search form to include current bbPress Forum ID if applicable. | |
// @link https://searchwp.com/documentation/knowledge-base/limiting-search-results-bbpress/ | |
add_filter( 'get_search_form', function( $markup ) { | |
if ( ! function_exists( 'bbp_get_forum_id' ) ) { | |
return $markup; | |
} | |
$forum_id = isset( $_REQUEST['swpforumid'] ) ? absint( $_REQUEST['swpforumid'] ) : bbp_get_forum_id(); | |
if ( empty( $forum_id ) ) { | |
return $markup; | |
} | |
return str_replace( '</form>', | |
'<input type="hidden" name="swpforumid" value="' . esc_attr( $forum_id ) . '" /></form>', | |
$markup | |
); | |
} ); | |
// Limit SearchWP results to the current bbPress Forum when applicable. | |
add_filter( 'searchwp\query\mods', function( $mods, $query ) { | |
if ( ! isset( $_REQUEST['swpforumid'] ) ) { | |
return $mods; | |
} | |
$mod = new \SearchWP\Mod( | |
\SearchWP\Utils::get_post_type_source_name( 'post' ) | |
); | |
$mod->set_where( [ [ | |
'column' => 'id', | |
'value' => absint( $_REQUEST['swpforumid'] ), | |
'compare' => '=', | |
'type' => 'NUMERIC', | |
] ] ); | |
$mods[] = $mod; | |
return $mods; | |
}, 30, 2 ); |