커스텀 필드는 글이나 페이지 작성 시 해당 내용에 추가 정보를 원하는 대로 등록하고, 필요시에 표시할 수 있도록 해주는 아주 유용한 워드프레스의 기본 기능입니다. 또한, 이 기능을 더 유용하게 사용할 수 있도록 도와주는 플러그인이 ACF(Advanced Custom Fields)입니다.

커스텀 필드 내용 검색 문제

ACF를 쓰든 아니면 워드프레스의 커스텀필드 기본기능을 이용하던 포스트나 페이지 작성 시 추가 데이터를 넣으면 이 데이터는 워드프레스 기본 검색기에 검색되지 않습니다. 커스텀필드의 데이터는 내용 저장 시 데이터베이스의 postmeta 테이블에 저장되는데 워드프레스 기본 검색기는 검색요청 시 posts 테이블의 내용만 검색해서 결과를 보여주기 때문입니다.

워드프레스 기본 검색에 포함되도록 하려면

아래의 코드를 사용중인 차일드테마의 functions.php 파일 맨 아래에 붙여 넣기 합니다.

/* 커스텀 필드의 내용을 기본 검색에 포함 */
//1.posts 와 postmeta 테이블 Join
function wpbox_search_join( $join ) {
    global $wpdb;
    if ( is_search() ) {    
        $join .=' LEFT JOIN '.$wpdb->postmeta. ' ON '. $wpdb->posts . '.ID = ' . $wpdb->postmeta . '.post_id ';
    }
    return $join;
}
add_filter('posts_join', 'wpbox_search_join' );

//2.쿼리 수정
function wpbox_search_where( $where ) {
    global $pagenow, $wpdb;
    if ( is_search() ) {
        $where = preg_replace(
            "/\(\s*".$wpdb->posts.".post_title\s+LIKE\s*(\'[^\']+\')\s*\)/",
            "(".$wpdb->posts.".post_title LIKE $1) OR (".$wpdb->postmeta.".meta_value LIKE $1)", $where );
    }
    return $where;
}
add_filter( 'posts_where', 'wpbox_search_where' );

//3.중복 결과 방지
function wpbox_search_distinct( $where ) {
    global $wpdb;
    if ( is_search() ) {
        return "DISTINCT";
    }
    return $where;
}
add_filter( 'posts_distinct', 'wpbox_search_distinct' );
인기글
카페24 웹호스팅 보안서버 SSL 인증서 443 포트 사용
인스타그램 Access Token 과 UserID 가져오는 방법
FTP 파일질라 전송시 한글파일 누락
워드프레스가 제한하는 파일을 업로드 하는 방법
워드프레스 도메인변경
워드프레스 우커머스 쇼핑몰 플러그인 한국형 배송 설정 정리
워드프레스 쇼핑몰 플러그인 우커머스 설정
Woocommerce Quick Buy – 플러그인 : 우커머스 상품목록에 바로구매 버튼 넣기
워드프레스 업로드파일 용량 제한 올리기
워드프레스 우커머스 배송 지역(Shipping Zones) 설정

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다