検索結果をGoogleのように表示したい。
-
検索フォームでの記事検索の結果をGoogleの検索結果のように
表示したいのですが、そのための便利なテンプレートタグまたは
プラグインを教えてください。具体的には
- ヒットした記事のタイトル、本文を表示したい。
- ヒットした記事から、最初に当てはまった検索語近辺の
200文字程度を抜き出したい。 - 検索語と同じ文字は太字で表示したい。
WordPressの内部関数を利用し、正規表現を使って、
『とりあえず動く』ものは作りました。↓
…しかし、テンプレートタグ等で簡単に、安全確実に表示できるなら
その方法を採りたいと思います。
//*********************************************
if (have_posts()):
while (have_posts()):
the_post();//WordPressループ中で、タイトルと本文を取得
$title = strip_tags($post->post_title);
$content = strip_tags($post->post_content);//検索語を分割
$arr_s = mb_split(" | ",$s);//--------------------------------------------
//本文の整形
//検索語のうち、どれかひとつでもヒットしたか?
$pos = -1;
foreach($arr_s as $s_word){
$pos = mb_strpos($content, $s_word);
if($pos >= 0){
break;
}
}
if($pos < 0){
$pos = 0;
}//見つかった場所から100文字を抽出
$content01 = mb_substr($content, $pos, 100);//見つかった場所手前から100文字抽出
//(文頭をきれいに整える)
$distant = 200 - mb_strlen($content01);
$pos2 = $pos - $distant;
if($pos2 < 0){
$distant += $pos2;
$pos2 = 0;
}
$content02 = mb_substr($content, $pos2, $distant);
$arr_con2 = mb_split(" | |\.|。|\,|、", $content02, 2);
$i = count($arr_con2) - 1;
$content02 = $arr_con2[$i];//見つかった場所近辺の文章として前後を合体させる
$content = $content02 . $content01;
//--------------------------------------------//ヒット文字列を太字に
foreach($arr_s as $s_word){
$title = preg_replace('/'.$s_word.'/i', "".$s_word."", $title);
$content = preg_replace('/'.$s_word.'/i', "".$s_word."", $content);
}//画面に表示
echo "<div>ID)."\">$title</div>\n";
echo "<div>$content ...</div>\n";endwhile;
endif;
- トピック「検索結果をGoogleのように表示したい。」には新たに返信することはできません。