プラグインなしで検索用語を強調表示する方法
4 回答
- 投票
-
- 2011-05-01
これら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); エコー '<p>' . $excerpt. '</p>'; } 関数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); エコー$タイトル; }
編集:
検索結果に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); エコー '<p>' . $ content. '</p>'; }
ループまたはsearch.phpファイルで
<?php search_title_highlight();を呼び出します.
および<?phpthe_title();の代わりに?>
?><?php search_excerpt_highlight();を使用します.
<?phpthe_excerpt();の代わりに?>
?>cssに、検索されたすべての単語を黄色で強調表示するsearch-highlightクラスを追加します.
.search-highlight { 背景:#FFFF00 }
Add these 2 functions to your 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; }
Edit:
To use the_content for your search results use the function below:
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>'; }
In your loop or search.php file call
<?php search_title_highlight(); ?>
instead of<?php the_title(); ?>
and use<?php search_excerpt_highlight(); ?>
instead of<?php the_excerpt(); ?>
In your css add the search-highlight class which will highlight all searched words in yellow.
.search-highlight { background:#FFFF00 }
-
[`preg_quote()`](http://php.net/preg_quote)を `$ keys`に適用して、括弧や角かっこなどの特殊文字の場合に正規表現が爆発しないようにします.Apply [`preg_quote()`](http://php.net/preg_quote) to `$keys` to prevent your regex from blowing up in case of special characters like parentheses or brackets.
- 4
- 2011-05-01
- Geert
-
ユーザーがシングルをクリックして投稿内に入った後、検索語を強調表示するのはどうですか?次に、**get_search_query()**は空の文字列を返しますWhat about highlighting the search term after the user clicks on the single and goes inside the post? Then the **get_search_query()** returns an empty string
- 1
- 2011-05-22
- Maor Barazany
-
代わりに、これらは `the_excerpt`と`the_content`のフィルターである必要があります.とにかく:いい答えですが、@ Geertからのコメントはで働くことができます:)Those should be filters for `the_excerpt` and `the_content` instead. Anyway: Nice answer, but the comment from @Geert could be worked in :)
- 1
- 2012-10-13
- kaiser
-
続きを読むhrefのテキストも置き換えていますか?これを修正する方法は?it is replacing the text in the readmore href also? how to fix this?
- 1
- 2014-01-13
- Naveen
-
- 2014-12-09
上記はうまく機能しますが、同様のコードを実行しましたが、タイトルと抜粋を結び付けています.しかし、誰かが検索クエリ用語の最初または最後にスペース ""を入力すると、壊れることがわかりました.
次の行を追加しました:
$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');
これが他の人の助けになることを願っています.
The above works well I've run the similar code, but tie the title and excerpt together. But found it breaks when someone enters a space " " either at the beginning or end of a search query term.
So Ive add this line:
$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');
Hope this proves to help others.
-
- 2015-07-27
上記の解決策は、検索語がHTMLタグ内にある場合、ページを壊します.次のようなものを使用する必要があります:
$regEx = '\'(?!((<.*?)|(<a.*?)))(\b'. implode('|', $keys) . '\b)(?!(([^<>]*?)>)|([^>]*?</a>))\'iu'; $text = preg_replace($regEx, '<strong class="search-highlight">\0</strong>', $text);
The above solutions break the page if the search term appears inside HTML tags. You should use something like:
$regEx = '\'(?!((<.*?)|(<a.*?)))(\b'. implode('|', $keys) . '\b)(?!(([^<>]*?)>)|([^>]*?</a>))\'iu'; $text = preg_replace($regEx, '<strong class="search-highlight">\0</strong>', $text);
-
あなたが私の日を作った仲間に感謝します:-)thanxs mate you made my day :-)
- 1
- 2016-01-26
- Agha Umair Ahmed
-
- 2020-03-02
フィルターを使用するための2つの回答の組み合わせ:
// Add class to searched terms 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', '<span class="search-highlight">\0</span>', $text); } return $text; } add_filter('the_excerpt', 'highlight_results'); add_filter('the_title', 'highlight_results');
次にCSSで(たとえば):
.search-highlight { background: #ffff94; padding: 0 2px; }
Combined 2 answers to use filters :
// Add class to searched terms 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', '<span class="search-highlight">\0</span>', $text); } return $text; } add_filter('the_excerpt', 'highlight_results'); add_filter('the_title', 'highlight_results');
Then in your CSS (for example) :
.search-highlight { background: #ffff94; padding: 0 2px; }
プラグインなしで検索語を強調表示するにはどうすればよいですか?