bbPress 각 게시판 개별 검색 방법

bbPress의 검색 기능은 전체 게시판을 대상으로 하지요. 개별 게시판을 따로 따로 검색하는 기능이 아쉬울 때가 있습니다. 위젯을 사용해도 마찬가지입니다. 아래와 같이 해보면 그럭저럭 개별 게시판 검색 기능을 구현할 수 있습니다.

첫째, Function파일에 다음과 같은 함수를 만들어 줍니다.

/*bbpress 각 게시판 개별 검색 방법*/
/*bbpress 내부로 Hook할 부분입니다*/
function my_bbp_search_form(){
    ?>
    <div class="bbp-search-form">
        <?php bbp_get_template_part( 'form', 'search' ); ?>
    </div>
    <?php
}
add_action( 'bbp_template_before_single_forum', 'my_bbp_search_form' );

/*
 * 개별 게시판 검색 부분
 */

function my_bbp_filter_search_results( $r ){
    //Get the submitted forum ID (from the hidden field added in step 2)
    $forum_id = sanitize_title_for_query( $_GET['bbp_search_forum_id'] );
 
    //If the forum ID exits, filter the query
    if( $forum_id && is_numeric( $forum_id ) ){
 
        $r['meta_query'] = array(
            array(
                'key' => '_bbp_forum_id',
                'value' => $forum_id,
                'compare' => '=',
            )
        );
         
    }
 
    return $r;
}
add_filter( 'bbp_after_has_search_results_parse_args' , 'my_bbp_filter_search_results' );

둘째, 다음은 여러분이 사용하는 WordPress Theme의 Child 폴더에 /bbpress 폴더를 만들어 준 후 오리지널 디렉토리 wp-content/plugins/bbpress/templates/defaults/bbpress에서 content-archive-forum.php 파일을 복사해서 넣고 다음과 같이 적힌 라인 세 줄을 제거합니다. (bbPress 버전에 따라 없을 수 있습니다. 없으면 그냥 내버려둡니다.)

<div class="bbp-search-form">
    <?php bbp_get_template_part( 'form', 'search' ); ?> 
</div>

셋째, 그 다음에는 wp-content/plugins/bbpress/templates/defaults/bbpress 폴더에 들어 있는 form-search.php에서 아래와 같이 된 원래 Code 전체를

<?php

/**
 * Search 
 *
 * @package bbPress
 * @subpackage Theme
 */

// Exit if accessed directly
defined( 'ABSPATH' ) || exit;

if ( bbp_allow_search() ) : ?>

	<div class="bbp-search-form">
		<form role="search" method="get" id="bbp-search-form">
			<div>
				<label class="screen-reader-text hidden" for="bbp_search"><?php esc_html_e( 'Search for:', 'bbpress' ); ?></label>
				<input type="hidden" name="action" value="bbp-search-request" />
				<input type="text" value="<?php bbp_search_terms(); ?>" name="bbp_search" id="bbp_search" />
				<input class="button" type="submit" id="bbp_search_submit" value="<?php esc_attr_e( 'Search', 'bbpress' ); ?>" />
			</div>
		</form>
	</div>

<?php endif;

다음과 같이 전체 다 바꿔줍니다.

<?php

/**
 * Search 
 *
 * @package bbPress
 * @subpackage Theme
 */
$forum_id = bbp_get_forum_id();
?>
 
<form role="search" method="get" id="bbp-search-form" action="<?php bbp_search_url(); ?>">
    <div>
        <label class="screen-reader-text hidden" for="bbp_search"><?php _e( 'Search for:', 'bbpress' ); ?></label>
        <input placeholder="Search <?php the_title(); ?> Topics" tabindex="<?php bbp_tab_index(); ?>" type="text" value="<?php echo esc_attr( bbp_get_search_terms() ); ?>" name="bbp_search" id="bbp_search" />
        <?php if( $forum_id ): ?>
        <input class="button" type="hidden" name="bbp_search_forum_id" value="<?php echo $forum_id; ?>" />
        <?php endif; ?>
        <input tabindex="<?php bbp_tab_index(); ?>" class="button" type="submit" id="bbp_search_submit" value="<?php esc_attr_e( 'Search', 'bbpress' ); ?>" />
    </div>
</form>

그런 다음 Child 디렉토리에 수정한 Function.php업로드하고, Child 디렉토리 안의 bbpress 폴더 안에 수정한 form-search.php 파일을 업로드합니다.

그러면 각 개별 게시판 상단 우측에 검색 필드가 생성될 것입니다. 대신 당초에 있던 전체 게시판을 대상으로 하는 검색 필드는 사라집니다. 만일 전체 게시판을 대상으로 하는 검색을 원할 때는 위젯으로 검색 필드를 설치해서 사용하면 됩니다.

※ 주의: 이 작업은 보다시피 코드 수정폭이 크기 때문에 위험성도 그만큼 큽니다. 반드시 bbpress templates 오리지널 파일을 잘 복사해두고, 작업하시기 바랍니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다