답변:
이 두 함수를 함수에 추가하십시오.
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
}
the_excerpt
하고 the_content
대신. 어쨌든 : 좋은 대답이지만 @Geert의 의견은 다음에서 작동 할 수 있습니다 :)
위의 코드는 잘 작동하지만 비슷한 코드를 실행했지만 제목과 발췌 부분을 묶습니다. 그러나 검색어의 시작 또는 끝에 공백 ""이 (가) 입력되면 중단됩니다.
따라서이 줄을 추가했습니다 :
$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');
이것이 다른 사람들을 도울 수 있기를 바랍니다.
검색어가 HTML 태그 안에 나타나면 위의 해결 방법으로 페이지가 손상됩니다. 다음과 같은 것을 사용해야합니다.
$regEx = '\'(?!((<.*?)|(<a.*?)))(\b'. implode('|', $keys) . '\b)(?!(([^<>]*?)>)|([^>]*?</a>))\'iu';
$text = preg_replace($regEx, '<strong class="search-highlight">\0</strong>', $text);
preg_quote()
하기 위해$keys
괄호 또는 괄호와 같은 특수 문자의 경우 폭파에서 정규식을 방지하기 위해.