如何在没有插件的情况下突出显示搜索词

时间:2011-05-01 作者:t-p

如何在没有插件的情况下突出显示搜索词?

4 个回复
SO网友:Chris_O

将这两个函数添加到函数中。php

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;
}
编辑:要在搜索结果中使用\\u内容,请使用以下功能:

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>\';
    }
在您的循环或搜索中。php文件调用<?php search_title_highlight(); ?> 而不是<?php the_title(); ?> 和使用<?php search_excerpt_highlight(); ?> 而不是<?php the_excerpt(); ?>

在css中添加search highlight类,该类将以黄色突出显示所有搜索的单词。

.search-highlight {
    background:#FFFF00  
    }

SO网友:Kyzer

以上操作很好,我运行了类似的代码,但将标题和摘录联系在一起。但发现当有人在搜索查询词的开头或结尾输入空格“”时,它会中断。

因此,我添加了这一行:

$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\');
希望这能帮助别人。

SO网友:TAH

如果搜索词出现在HTML标记中,上述解决方案会破坏页面。您应该使用以下内容:

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

SO网友:Vincent Decaux

组合2个答案以使用过滤器:

// Add class to searched terms
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\', \'<span class="search-highlight">\\0</span>\', $text);
    }
    return $text;
}
add_filter(\'the_excerpt\', \'highlight_results\');
add_filter(\'the_title\', \'highlight_results\');
然后在CSS中(例如):

.search-highlight {
    background: #ffff94;
    padding: 0 2px;
}

结束