問題描述

如何在不插件的情況下突出顯示搜索字詞?

最佳解決方案

將這 2 個函數添加到你的 functions.php 中

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

次佳解決方案

上面的工作很好,我已經運行相似的代碼,但將標題和摘錄結合在一起。但是當有人在搜索查詢項的開頭或結尾進入空格” “ 時發現它會中斷。

所以我添加這一行:

$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');

希望這可以幫助別人。

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。