在 WordPress 的搜尋頁裡,通常搜尋的結果會顯示摘要 (excerpt),但摘要裡面很有可能是沒有包含相關的搜尋關鍵字,但我們會有需求希望可以在搜尋摘要裡面標記出搜尋的關鍵字,因此我們會需要從原本的文章抓出關鍵字後進行標記。
演算法
- 取得文章的整個內文
- 在移除 HTML 後將空白、換行這些特殊字元換掉
- 找到關鍵字發生的位置,並在前後保留 60 個字元 (可自行調整)
- 在關鍵字前後帶入
<strong>
做標記
完整程式碼
$post = get_post($post_id);
$text = strip_tags(preg_replace(array("/\r?\n/", '@<\s*(p|br\s*/?)\s*>@'), array('', "\n"), apply_filters('the_content', $post->post_content)));
$position = mb_strpos($text, $keyword);
if ($position !== false) {
$start = max(0, $position - 30);
$end = min(mb_strlen($text), $position + mb_strlen($keyword) + 60);
$substring = mb_substr($text, $start, $end - $start);
$highlightedSubstring = str_replace($keyword, "<strong>{$keyword}</strong>", $substring);
return $highlightedSubstring . '...';
}
return get_the_excerpt($post_id);