programing

워드프레스 검색을 수정하여 분류학 용어와 범주 용어를 쿼리하는 방법은 무엇입니까?

newstyles 2023. 10. 11. 20:34

워드프레스 검색을 수정하여 분류학 용어와 범주 용어를 쿼리하는 방법은 무엇입니까?

검색을 수정해서 제가 "저자"라는 분류 체계를 가지고 있다고 말하고 게시물에 "이안 랭킨"이라는 용어를 추가하면 "이안 랭킨"을 검색하면 해당 게시물이 뜨기를 원합니다.지금은 제목과 내용만 검색하는 것 같습니다.검색어도 어떻게 만드나요?

필터 후크를 사용하여 검색 쿼리를 변경하여 분류법 테이블에 결합할 수 있습니다.

예를 들어 '저자' 분류법도 검색합니다.

먼저 분류법 표를 결합합니다.

function tax_search_join( $join )
{
  global $wpdb;
  if( is_search() )
  {
    $join .= "
        INNER JOIN
          {$wpdb->term_relationships} ON {$wpdb->posts}.ID = {$wpdb->term_relationships}.object_id
        INNER JOIN
          {$wpdb->term_taxonomy} ON {$wpdb->term_taxonomy}.term_taxonomy_id = {$wpdb->term_relationships}.term_taxonomy_id
        INNER JOIN
          {$wpdb->terms} ON {$wpdb->terms}.term_id = {$wpdb->term_taxonomy}.term_id
      ";
  }
  return $join;
}
add_filter('posts_join', 'tax_search_join');

그런 다음 분류학 '저자'에서 검색어를 찾습니다.

function tax_search_where( $where )
{
  global $wpdb;
  if( is_search() )
  {
    // add the search term to the query
    $where .= " OR
    (
      {$wpdb->term_taxonomy}.taxonomy LIKE 'author'
      AND
      {$wpdb->terms}.name LIKE ('%".$wpdb->escape( get_query_var('s') )."%')
    ) ";
  }
  return $where;
}
add_filter('posts_where', 'tax_search_where');

그리고 마지막으로 post id로 결과를 그룹화하여 join 때문에 중복되는 결과를 방지합니다.

function tax_search_groupby( $groupby )
{
  global $wpdb;
  if( is_search() )
  {
    $groupby = "{$wpdb->posts}.ID";
  }
  return $groupby;
}
add_filter('posts_groupby', 'tax_search_groupby');

또한 MySQL의 EXIST 기능을 용어와 term_relations를 결합하는 하위 쿼리와 함께 사용하여 수행할 수도 있습니다.다음 토막글을 만들어 함수에 넣었습니다.php.이것은 적어도 WordPress Version 5.3.1에 적용됩니다.

// Search titles and tags
function and_extend_search( $search, &$wp_query ) {

    global $wpdb;

    if ( empty( $search ))
        return $search;

    $terms = $wp_query->query_vars[ 's' ];
    $exploded = explode( ' ', $terms );
    if( $exploded === FALSE || count( $exploded ) == 0 )
        $exploded = array( 0 => $terms );

    $search = '';
    
    foreach( $exploded as $tag ) {
        $search .= " AND (
            ($wpdb->posts.post_title LIKE '%$tag%')

            OR EXISTS
            (
                SELECT 
                    *
                FROM 
                    $wpdb->term_relationships 
                LEFT JOIN 
                    $wpdb->terms 
                ON 
                    $wpdb->term_relationships.term_taxonomy_id = $wpdb->terms.term_id
                WHERE
                        $wpdb->terms.name LIKE '%$tag%'
                    AND
                        $wpdb->term_relationships.object_id = $wpdb->posts.ID
            )
        )";
    }

    return $search;
}
add_filter('posts_search', 'and_extend_search', 500, 2);

언급URL : https://stackoverflow.com/questions/13491828/how-to-amend-wordpress-search-so-it-queries-taxonomy-terms-and-category-terms