プラグインなしで検索語を強調表示する方法


15

プラグインなしで検索用語を強調表示するにはどうすればよいですか?

回答:


14

これらの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">\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;
}

編集:

検索結果に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">\0</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 {
    background:#FFFF00  
    }

3
に適用preg_quote()$keysて、括弧や括弧などの特殊文字の場合に正規表現が爆発しないようにします。
ヘールト

1
ユーザーがシングルをクリックして投稿内に入った後に検索用語を強調表示するのはどうですか?その後get_search_query()は空の文字列を返します
Maor Barazany

1
これらはthe_excerptthe_content代わりにフィルタである必要があります。とにかく良い答えですが、@ Geertからのコメントは次のように処理できます:)
kaiser

1
リードモアリンクに<strong class = "search-highlight">コードを適用します。検索語がある場合も、どうすれば解決できますか。

1
readmore hrefのテキストも置き換えていますか?これを修正する方法は?
ナビーン

3

上記はうまくいきますが、同様のコードを実行しましたが、タイトルと抜粋を結び付けます。しかし、誰かが検索クエリ用語の最初または最後にスペース ""を入力すると、それが壊れることがわかりました。

だから私はこの行を追加しました:

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

これが他の人を助けることを証明することを望みます。


2

上記のソリューションでは、検索語がHTMLタグ内にある場合、ページが破損します。次のようなものを使用する必要があります。

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

1
あなたが私の日を作ったありがとう:-)
アガ・ウメア・アーメド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.