플러그인없이 검색어를 강조 표시하는 방법


15

플러그인없이 검색어를 강조 표시하려면 어떻게해야합니까?

답변:


14

이 두 함수를 함수에 추가하십시오.

function search_excerpt_highlight() {
    $excerpt = get_the_excerpt();
    $keys = implode('|', explode(' ', get_search_query()));
    $excerpt = preg_replace('/(' . $keys .')/iu', '<strong class="search-highlight">\0</strong>', $excerpt);

    echo '<p>' . $excerpt . '</p>';
}

function search_title_highlight() {
    $title = get_the_title();
    $keys = implode('|', explode(' ', get_search_query()));
    $title = preg_replace('/(' . $keys .')/iu', '<strong class="search-highlight">\0</strong>', $title);

    echo $title;
}

편집하다:

검색 결과에 the_content를 사용하려면 아래 함수를 사용하십시오.

function search_content_highlight() {
        $content = get_the_content();
        $keys = implode('|', explode(' ', get_search_query()));
        $content = preg_replace('/(' . $keys .')/iu', '<strong class="search-highlight">\0</strong>', $content);

        echo '<p>' . $content . '</p>';
    }

루프 또는 search.php 파일 <?php search_title_highlight(); ?>대신에 대신 <?php the_title(); ?>사용하십시오.<?php search_excerpt_highlight(); ?><?php the_excerpt(); ?>

CSS에서 검색 된 모든 단어를 노란색으로 강조 표시하는 search-highlight 클래스를 추가하십시오.

.search-highlight {
    background:#FFFF00  
    }

3
적용 preg_quote()하기 위해 $keys괄호 또는 괄호와 같은 특수 문자의 경우 폭파에서 정규식을 방지하기 위해.
Geert

1
사용자가 단일 항목을 클릭하고 게시물 내부로 이동 한 후 검색어를 강조 표시하는 것은 어떻습니까? 그런 다음 get_search_query () 는 빈 문자열을 반환합니다.
Maor Barazany

1
사람들은 필터해야 the_excerpt하고 the_content대신. 어쨌든 : 좋은 대답이지만 @Geert의 의견은 다음에서 작동 할 수 있습니다 :)
kaiser

1
검색어가있는 경우 <more class = "search-highlight"> 코드를 readmore 링크에 적용합니다. 어떻게 해결할 수 있습니까?

1
readmore href의 텍스트도 바꾸고 있습니까? 이 문제를 해결하는 방법?
Naveen

3

위의 코드는 잘 작동하지만 비슷한 코드를 실행했지만 제목과 발췌 부분을 묶습니다. 그러나 검색어의 시작 또는 끝에 공백 ""이 (가) 입력되면 중단됩니다.

따라서이 줄을 추가했습니다 :

$keys = array_filter($keys);

// Add Bold to searched term
function highlight_results($text){
     if(is_search() && !is_admin()){
     $sr = get_query_var('s');
     $keys = explode(" ",$sr);
     $keys = array_filter($keys);
     $text = preg_replace('/('.implode('|', $keys) .')/iu', ''.$sr.'', $text);
     }
     return $text;
}
add_filter('the_excerpt', 'highlight_results');
add_filter('the_title', 'highlight_results');

이것이 다른 사람들을 도울 수 있기를 바랍니다.


2

검색어가 HTML 태그 안에 나타나면 위의 해결 방법으로 페이지가 손상됩니다. 다음과 같은 것을 사용해야합니다.

      $regEx = '\'(?!((<.*?)|(<a.*?)))(\b'. implode('|', $keys) . '\b)(?!(([^<>]*?)>)|([^>]*?</a>))\'iu';
      $text = preg_replace($regEx, '<strong class="search-highlight">\0</strong>', $text);

1
고맙습니다 친구 당신이 내 하루를 만든 :-)
Agha Umair Ahmed
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.