-
2015/12/24 12:57 오후 #29457
안녕하세요
검색할때 모든 포스트의 제목과 내용에서 검색을 하잖아요
거기에 제가 따로 추가한 post_type의 제목과 내용도 검색범위에 포함시키고자 하는데
인터넷을 검색하면서 해봐도 에러가나옵니다.
————
인터넷 검색으로 테마의 function.php에 다음 코드를 추가하였으나
검색시 410gone 오류가 발생하는데 왜그런걸까요
—–코드—–
add_action( ‘pre_get_posts’, ‘search_add_custom_post_type’ );
function search_add_custom_post_type( $query ) {
global $pagenow;
global $post_type;$term = $query->get( ‘s’ ); //사용자가 입력한 검색어
//이야기거리로 검색시 ‘임의타입’이 custom post type이므로 이를 검색영역에 추가하기 위함
if( !is_admin() || $post_type != ‘customtypename’ || $pagenow != ‘edit.php’ || empty( $term ) ) {
return;
}$meta_query = $query->get( ‘meta_query’ );
$search = array(
‘relation’ => ‘OR’,
array(
‘key’ => ‘post_title’,
‘value’ => $term,
‘compare’ => ‘LIKE’
),
array(
‘key’ => ‘post_content’,
‘value’ => $term,
‘compare’ => ‘LIKE’
)
);$meta_query[] = $search;
$query->set( ‘meta_query’, $meta_query );
}//필터
$custom_search_query = ”;
$custom_meta_query = ”;// post_title, post_content 검색 쿼리 부분 기록
add_filter( ‘posts_search’, function ( $sql ) {
global $custom_search_query;
$custom_search_query = $sql;
return $sql;
} );// meta 부분 쿼리 기록 (join, where 키로 구성된 array)
add_filter( ‘get_meta_sql’, function ( $sql ) {
global $custom_meta_query;
$custom_meta_query = $sql;
return $sql;
} );// where 절을 최종 편집
add_filter( ‘posts_where’, function ( $sql ) {
global $custom_search_query, $custom_meta_query;$m = NULL;
// search_query 문자열은 보통 괄호 두 개 안에 post_title, post_content 각 필드 조건을 OR로 묶음.
if( preg_match(‘/\(\((.+)\)\)/ms’, $custom_search_query, $m ) ) {$meta_part = $custom_meta_query[‘where’];
// WHERE 절에서 AND … 로 시작하는 meta 검색을 삭제
$sql = str_replace( $meta_part, ”, $sql );$post_part = $m[1];
$meta_altered = preg_replace( ‘/\s*AND\s+(.+)/ms’, ‘ OR $1’, $meta_part );
$substitute = ‘AND ((‘ . $post_part . $meta_altered . ‘))’;// post title, post content 검색과 같이 커스텀 필드도 OR 조건으로 검색
$sql = str_replace( $custom_search_query, $substitute, $sql );
}return $sql;
} );2015/12/24 1:48 오후 #29459일단 워드프레스 자체 검색 기능이 그리 썩 좋지 않습니다. 제가 뭘 원하는지 제 마음속 까지 읽는 수준으로 정보를 찾아주는 구글신에 익숙해서인지 아무리 좋다는 검색플러그인을 가져다 써봐도 개인적으로 만족스럽지가 않았습니다.
그래서 저는 그냥 구글검색엔진을 제 사이트에서 씁니다. (건망증이 심해서인지 제가 써놓고도 나중에 기억을 못해서 그 내용을 찾는 경우가 많아서.. >.<)
custom post type 은 워드프레스 자체 검색 내용에 포함되지 않고, 그래서 custom post type 도 검색결과에 포함시키시려고 하시고 계신데,
우커머스 (워드프레스 소유/ 워드프레스 회사 중 하나 입니다.) 에서 근무하는 개발자 Remi Corson 이 공유한 script 를 한번 사용해 보시는 것은 어떨까 싶습니다.
위에 기재해놓으신 script 는, 저한테는 매우 생소한.. 흔하게 접하는 워드프레스 식의 scripting 은 아니네요. 검색기능에 왜 filter 적용을 하는지 그 이유도 모르겠고, 누가 알려준다고 해도 알고 싶지도 않은…. -..-;;;
직접 sql query 를 하는 건 알겠는데, 저런다고 검색결과가 좋아지기는 커녕 더
후져나빠질것 같은데 말이죠..Attorney, front-end developer, digital media artist, WordPress enthusiast, & a father of 4 wonderful children.Lives in Colorado.
2015/12/24 4:05 오후 #29465Matthew Park님 답변 감사합니다.
그 첨부해 주신 부분의 function을 단순히 theme의 function.php에 넣기만 하면 되는건지요?
보니까 따로 건드려야 될 부분은 없는거 같은데
만약에 제가 검색시
select option이
전체검색
부분검색1
부분검색2이렇게 3개가 있을 때 부분검색1 부분에서는
전체 포스트 중 특정 카테고리와 특정 커스텀 포스트 타입에서 검색하려고 하는데요우선 특정 카테고리를 거르는 부분은
<select name=”cat”>…<option value=”<?echo $cat_id;?>”>부분검색1</option>…
$cat_id에 배열로 카테고리 아이디를 줘서 해결하긴 했는데
여기서 위 function을 function.php에 추가하기만 하면 되는건지요.
그리고 위 function 발동 조건을 select가 부분검색1일 경우에만 한정지으려면
function 처음부분 if( is_search() ) { 여기에 추가로 조건을 주면 될까요??
2015/12/24 4:52 오후 #29466글수정이 안되서 현재 원하는 검색 기능을 요약하자면
부분검색1 에서 검색어를 입력하고 검색 버튼을 누르면
특정 카테고리들에 추가로 custom post_type을 검색 범위로 해서
검색을 하고자 합니다.
특정 카테고리들은 name=”cat”, value에 카테고리id를 배열로 줘서 해결했으나
여기에 일반 post가 아닌 custom post_type의 title과 content에서도 검색이 되게끔 하고자 합니다.
물론 select박스가 전체검색일때는 모든 post에서 검색이 되게 하고요.
2015/12/24 11:15 오후 #29472처음 질문과는 또 전혀 다른 질문이시네요. ㅎㅎㅎ 아니면 제가 난독증인건지…
여기저기서 짜집기 해서 원하시는 기능을 구축하는 것도 방법이기한데, 검증되고 잘 작동되는 오픈소스를 사용하시는 것 도 좋은 방법입니다.
영어로 지금 원하시는 검색기능을 설명하자면, 이렇게 들립니다.
Need a multi-select author field combined with a keyword search plus checkboxes for multiple taxonomies?
설명하신 내용에 거의 직역에 가깝지 않나 생각되는데….
이걸 원하신다는거죠?
소스코드는 github 에 공유되어 있습니다.
https://github.com/bootsz/wp-advanced-search
Attorney, front-end developer, digital media artist, WordPress enthusiast, & a father of 4 wonderful children.Lives in Colorado.
2015/12/28 9:21 오전 #29477아 연휴끝나고 이제야 봤습니다.
음 제가 영어 실력이 부족해서..
대충 원하는 기능을 영어로 하자면
how to search titles, contents for custom and normal post type
이건데요
그… 위 기능 중 custom post_type을 ‘함께’ 검색한다는 부분을 모르겠습니다.(일반 post에서는 category로 post를 한정지어서 검색할 건데 그부분은 name을 cat로 주고 id를 categoryid로 줘서 해결 했습니다)
그래도 직역까지 해주시고 감사합니다.
나머지는 제가 찾아야 할 몫이겠죠 ㅎ
-
AuthorPosts
- 답변은 로그인 후 가능합니다.