커스텀 필드는 글이나 페이지 작성 시 해당 내용에 추가 정보를 원하는 대로 등록하고, 필요시에 표시할 수 있도록 해주는 아주 유용한 워드프레스의 기본 기능입니다. 또한, 이 기능을 더 유용하게 사용할 수 있도록 도와주는 플러그인이 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' );
글쓴이 :
WPBOX.KR 운영자
AVADA.KR 운영자
EnnioLove.com 운영자
Facebook
everygofine@gmail.com
인기글
구글맵 API 설정 후에도 “개발 목적”이라고 표시되는 경우
워드프레스 차일드테마 설치 Child theme
카페24 웹호스팅 보안서버 SSL 인증서 443 포트 사용
워드프레스 한국형 게시판_KBoard와 MangBoard
Yoast seo 플러그 사용법 (1.General)
레볼루션 슬라이더 버전 4.X 사용법
MAMP 사용기(내 컴퓨터에 로컬서버 구축하기)
인스타그램 Access Token 과 UserID 가져오는 방법
사용자 정의 필드와 ACF (Advanced Custom Fields) 플러그인
워드프레스에서 글과 페이지의 차이

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다