사용자 지정 게시 유형을 표시하는 워드프레스 검색 중지
코드화 해제 테마를 사용하여 작성된 페이지의 일부 텍스트 블록에 사용하는 사용자 지정 게시 유형이 하나 있습니다.이러한 블록이 페이지에 표시되도록 공개해야 하지만 검색 결과에 표시되지 않도록 합니다.
search.php는 일반 워드프레스 검색 파일과 달리 코드 해제 테마 파일이며 일반 쿼리가 없다고 생각하기 때문에 기능이 필요할 것 같습니다.
어떻게 해야 하는지 조언해 주실 수 있나요?
CPT는 "static content"입니다.
감사합니다!
여기서의 답은 CPT를 자체 코드로 작성하는지, 또는 다른 플러그인이 CPT를 작성하는지 여부에 따라 달라집니다.두 가지 접근법에 대한 자세한 설명은 다음 링크를 참조하십시오.
http://www.webtipblog.com/exclude-custom-post-type-search-wordpress/
기본적인 요지는 다음과 같습니다.
독자적인 CPT를 작성하는 경우는, 다음의 register_post_type() 콜에 인수를 추가할 수 있습니다.'exclude_from_search' => true
다른 플러그인/테마가 CPT를 작성하는 경우 나중에 CPT에 대한 필터의 일부로 다음과 같이 exclude_from_search 변수를 설정해야 합니다.
// functions.php
add_action( 'init', 'update_my_custom_type', 99 );
function update_my_custom_type() {
global $wp_post_types;
if ( post_type_exists( 'staticcontent' ) ) {
// exclude from search results
$wp_post_types['staticcontent']->exclude_from_search = true;
}
}
저는 인정된 답변이 옳다고 생각합니다. exclude_from_search
모두 방지$query = new WP_Query
결과로부터 얻을 수 있습니다.
핵심은 다음과 같습니다.
...리비전 및 'exclude_from_search'가 TRUE로 설정된 유형을 제외한 모든 유형을 가져옵니다.)
이것은 일반적인 문제로 데이터베이스의 프론트 엔드 검색 결과 페이지 v.s. 검색 게시물과 혼동됩니다.
프런트 엔드의 커스텀 쿼리를 사용한 콘텐츠 표시, 니즈exclude_from_search = false
또는 다른 방법을 사용하여 id별로 직접 콘텐츠를 얻을 수도 있습니다.
대신 검색 프런트엔드 메커니즘을 필터링해야 합니다.이것은, 「알고 있는」유형을 수동으로 재구축하지 않고, 검색에서 투고 타입을 제외합니다.
function entex_fn_remove_post_type_from_search_results($query){
/* check is front end main loop content */
if(is_admin() || !$query->is_main_query()) return;
/* check is search result query */
if($query->is_search()){
$post_type_to_remove = 'staticcontent';
/* get all searchable post types */
$searchable_post_types = get_post_types(array('exclude_from_search' => false));
/* make sure you got the proper results, and that your post type is in the results */
if(is_array($searchable_post_types) && in_array($post_type_to_remove, $searchable_post_types)){
/* remove the post type from the array */
unset( $searchable_post_types[ $post_type_to_remove ] );
/* set the query to the remaining searchable post types */
$query->set('post_type', $searchable_post_types);
}
}
}
add_action('pre_get_posts', 'entex_fn_remove_post_type_from_search_results');
그리고 코멘트$post_type_to_remove = 'staticcontent';
다른 포스트 유형에 맞게 변경할 수 있습니다.
여기서 Im이 놓친 것이 있으면 코멘트해 주세요.이러한 포스트 타입의 시나리오를 막을 수 있는 다른 방법을 찾을 수 없습니다.쿼리별로 콘텐츠를 표시하지만 검색/프런트 엔드 유저에 대한 직접 액세스는 피합니다.
우선, Jonas Lundman의 답변은 정확하고 받아들여진 답변이어야 한다.
그exclude_from_search
파라미터가 올바르게 동작하지 않습니다.다른 쿼리에서 포스트 타입도 제외됩니다.
WP 문제 추적 시스템에 티켓이 있지만, 역호환성을 깨지 않고는 수정할 수 없기 때문에 수정하지 않고 닫았습니다.자세한 내용은 이 티켓과 이 티켓을 참조하십시오.
Jonas Lundman이 제안한 솔루션에 대해 다음과 같은 이유로 체크를 추가했습니다.
- 에서는 검색하려는 다른 수 단순히 쿼리를 .따라서 단순히 이 플러그인이
post_type
을 사용법 - 제외하는 포스트 타입의 배열을 사용하는 것이 더 유연하다고 생각합니다.
add_action('pre_get_posts', 'remove_my_cpt_from_search_results');
function remove_my_cpt_from_search_results($query) {
if (is_admin() || !$query->is_main_query() || !$query->is_search()) {
return $query;
}
// can exclude multiple post types, for ex. array('staticcontent', 'cpt2', 'cpt3')
$post_types_to_exclude = array('staticcontent');
if ($query->get('post_type')) {
$query_post_types = $query->get('post_type');
if (is_string($query_post_types)) {
$query_post_types = explode(',', $query_post_types);
}
} else {
$query_post_types = get_post_types(array('exclude_from_search' => false));
}
if (sizeof(array_intersect($query_post_types, $post_types_to_exclude))) {
$query->set('post_type', array_diff($query_post_types, $post_types_to_exclude));
}
return $query;
}
언급URL : https://stackoverflow.com/questions/39836785/stop-wordpress-search-showing-a-custom-post-type
'source' 카테고리의 다른 글
Zuul 예외 사용자 지정 (0) | 2023.02.26 |
---|---|
날짜별로 MongoDB ObjectId를 조회할 수 있습니까? (0) | 2023.02.26 |
iPhone용 Objective-C에서 Google Directions API polylines 필드를 lat long 포인트로 디코딩하는 방법은 무엇입니까? (0) | 2023.02.26 |
AngularJS: 컨트롤러에서 특정 양식 입력 필드를 비활성화할 수 있습니까? (0) | 2023.02.26 |
WooCommerce에서 결제 직후 주문 상태 변경 (0) | 2023.02.26 |