programing

WordPress 검색 결과에 결과 추가

powerit 2023. 3. 29. 21:59
반응형

WordPress 검색 결과에 결과 추가

WordPress 검색 결과에 추가/주입/추가하고 싶습니다.

현재 WordPress에서는 자체 데이터베이스에서 실행 중인 쿼리만 "조정"할 수 있으며 결과 배열을 수정(또는 WordPress 언어, 필터)할 수 없습니다.

예: WordPress에서 '감자'라는 용어를 검색하면 이 용어와 관련된 모든 게시물이 되돌아옵니다.다른 서비스를 통해 얻은 결과를 WordPress 결과 세트에 포함시키고 싶습니다.

확실히 말씀드리면, 서드파티 API 콜 결과입니다.WordPress 데이터베이스에서 찾을 수 없습니다.

어떻게 하면 좋을지 아시는 분?

편집: 검색 템플릿을 변경하지 않고 WordPress 플러그인에서 이 작업을 수행하는 것이 좋습니다.

사용할 수 있습니다.pre_get_posts검색 결과를 변경하지 않고 추가/편집하는 것이 검색 템플릿입니다.

페이지를 제외하려면

검색 결과의 페이지를 제외합니다.게시물의 결과만 표시하여 검색 결과를 제한하는 작업 후크를 만들 수 있습니다.

다음 예시는 이를 수행하는 방법을 보여 줍니다.

function search_filter($query) {
  if ( !is_admin() && $query->is_main_query() ) {
    if ($query->is_search) {
      $query->set('post_type', 'post');
    }
  }
}

add_action('pre_get_posts','search_filter');

검색 결과에 사용자 지정 게시 유형 포함

function search_filter($query) {
  if ( !is_admin() && $query->is_main_query() ) {
    if ($query->is_search) {
      $query->set('post_type', array( 'post', 'movie' ) );
    }
  }
}

add_action('pre_get_posts','search_filter');

커스텀/API 결과 포함

function search_filter() {
    if ( is_search() ) {
        // Do your API call here
        // Save retrieved data in your wordpress
        // This will also help to you avoid api call for repeated queries.
        $post_id = wp_insert_post( $post, $wp_error ); // wp_insert_post() // Programatically insert queries result into your wordpress database
        array_push( $query->api, $post_id );
    }
}
add_action('pre_get_posts','search_filter');    
function have_posts_override(){
    if ( is_search() ) {
        global $wp_query;
        $api_post = $wp_query->api;
        foreach ($api_post as $key) {
        // This will enable you to add results you received using API call
        // into default search results.
            array_push($wp_query->posts, $key); 
        }
    }
}
add_action( 'found_posts', 'have_posts_override' );

레퍼런스:

오래된 질문일 수도 있지만 저도 비슷한 문제가 있었고 앞으로 누군가도 있을 수 있기 때문에 (더 나은) 해결책을 올리겠습니다.

위와 같이 API 쿼리 결과를 wp_posts-table에 저장하고(커스텀 포스트 타입으로) 일반 WP-Search를 실행하는 것이 가장 깨끗한 솔루션이었을 것입니다.

그러나 제 경우 외부 데이터를 캐시하고 기존 게시물의 ID에 링크하는 다른 테이블을 처리해야 했기 때문에 이 구조를 변경할 수 없었습니다.

따라서 Abhineet Verma 솔루션(search_filter + pre_get_posts)은 처음에는 유용해 보였지만, 결국은 나에게 적합하지 않았습니다.쿼리 결과에 추가 투고를 추가할 수 있었습니다만, 통상의 결과 페이지 번호에 맞지 않습니다.예를 들어 페이지당 10개의 결과를 표시하고 위의 솔루션을 사용하여 api에서 20개의 결과를 얻는 경우 페이지당 30개의 결과를 얻을 수 있습니다.이것은 페이지에 속하는 10개의 일반 결과이며 각 페이지에 20개의 결과를 모두 더한 값입니다.페이지 번호부여 플러그인도 몇 개 깨집니다.

그래서 나는 마침내 다음과 같이 문제를 해결했다.posts_search 필터를 사용하여 sql-query를 확장했습니다.

add_filter('posts_search', function($sql) {

    if (!$sql) {
        return $sql;
    }

    global $wpdb;
    $sqst = "select id from {$wpdb->prefix}mytable ... bla bla ->  query to my custom table, wich return a bunch of IDs";
    $sqlr = "AND (({$wpdb->prefix}posts.ID in ($sqst)) or (1 = 1 $sql))";

    return $sqlr;

});

조금 이상하게 생겼지만 아주 잘 작동합니다.어쩌면 그것이 때때로 누군가를 도울지도 몰라!

언급URL : https://stackoverflow.com/questions/24195818/add-results-into-wordpress-search-results

반응형