サポート » テーマ » 検索結果を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のように表示したい。」には新たに返信することはできません。