WordPress를 사용하면 사이트 내에서 검색 기능을 이용해 사용자가 원하는 콘텐츠를 찾을 수 있습니다. 그러나 기본적으로 WordPress의 검색은 모든 게시물 유형, 즉 글(post), 페이지(page), 그리고 사용자가 정의한 사용자 지정 포스트 유형(custom post type) 등을 대상으로 합니다. 때로는 특정 유형의 게시물로 결과를 제한하고 싶거나, 특정 카테고리에 속한 게시물만 보여주고 싶은 경우가 있습니다.

이를 구현하기 위해선, WordPress의 함수인 pre_get_posts를 이용하여 검색 쿼리를 수정해야 합니다. 이 함수를 통해 검색 결과를 원하는 게시물 유형 또는 특정 카테고리로 제한할 수 있습니다.

먼저, 테마의 functions.php 파일에 다음과 같은 코드를 추가합니다.

// 검색 및 특정 게시물 유형 또는 카테고리 제한
function searchfilter($query) {
    // 검색 페이지이며, 관리자 페이지가 아닌 경우에만 적용
    if ($query->is_search && !is_admin() ) {
        // 여기서 원하는 유형 또는 카테고리를 지정합니다.

        // 게시물 유형으로 제한하는 경우
        // $query->set('post_type', array('post', 'page')); // 글(post)과 페이지(page) 모두 검색 결과에 포함
        $query->set('post_type', array('post')); // 글(post)만 검색하도록 등록
        
        // 특정 카테고리로 제한하는 경우
        $query->set('category_name', 'news'); // 카테고리 슬러그가 news 인 것만 검색하도록 등록
    }
    return $query;
}
add_filter('pre_get_posts','searchfilter');

위 코드에서 searchfilter 함수는 검색 결과를 수정하는 역할을 합니다. 먼저, 함수 내부에서 $query->is_search를 사용하여 현재 페이지가 검색 페이지인지 확인합니다. 또한, !is_admin()을 사용하여 관리자 페이지에서는 이 코드가 실행되지 않도록 합니다.

그 다음, post_type 속성을 이용하여 원하는 게시물 유형으로 검색 결과를 제한할 수 있습니다. 예를 들어, ‘post’로 설정하면 포스트만 검색 결과에 포함됩니다. 만약 페이지도 결과에 포함시키고 싶다면 배열에 ‘page’를 추가하면 됩니다.

또한, category_name 속성을 이용하여 특정 카테고리로 검색 결과를 제한할 수 있습니다. 여기서 ‘news’는 원하는 카테고리의 슬러그입니다. 원하는 카테고리의 슬러그를 입력하여 해당 카테고리에 속한 게시물만 검색 결과로 보여줄 수 있습니다.

코드를 적용한 후에는 변경 사항을 저장하고 사이트를 새로 고침하면 설정이 적용됩니다. 이제 필요에 맞게 코드를 수정하여 원하는 게시물 유형 또는 특정 카테고리로 검색 결과를 제한할 수 있습니다.