커스텀 필드는 글이나 페이지 작성 시 해당 내용에 추가 정보를 원하는 대로 등록하고, 필요시에 표시할 수 있도록 해주는 아주 유용한 워드프레스의 기본 기능입니다. 또한, 이 기능을 더 유용하게 사용할 수 있도록 도와주는 플러그인이 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
워드프레스 한국형 게시판_KBoard와 MangBoard
레볼루션 슬라이더 버전 4.X 사용법
Yoast seo 플러그 사용법 (1.General)
카페24 웹호스팅 보안서버 SSL 인증서 443 포트 사용
MAMP 사용기(내 컴퓨터에 로컬서버 구축하기)
사용자 정의 필드와 ACF (Advanced Custom Fields) 플러그인
워드프레스에서 글과 페이지의 차이
도메인 제한이 없는 유료 디비테마 소개(Divi Theme)

답글 남기기

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