ฉันจะรับไฮไลต์ข้อความค้นหาที่ไม่มีปลั๊กอินได้อย่างไร
ฉันจะรับไฮไลต์ข้อความค้นหาที่ไม่มีปลั๊กอินได้อย่างไร
คำตอบ:
เพิ่ม 2 ฟังก์ชั่นเหล่านี้ไปยังฟังก์ชั่นของคุณ
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
}
the_excerpt
และthe_content
แทน อย่างไรก็ตาม: คำตอบที่ดี แต่ความคิดเห็นจาก @Geert อาจจะทำงานใน :)
ข้างต้นทำงานได้ดีฉันใช้รหัสที่คล้ายกัน แต่ผูกชื่อและข้อความที่ตัดตอนมาด้วยกัน แต่พบว่ามันหยุดลงเมื่อมีคนป้อนช่องว่าง "" ที่จุดเริ่มต้นหรือจุดสิ้นสุดของข้อความค้นหา
ดังนั้นฉันจึงเพิ่มบรรทัดนี้:
$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');
หวังว่านี่จะช่วยคนอื่นได้
การแก้ปัญหาข้างต้นแบ่งหน้าถ้าคำค้นหาปรากฏภายในแท็ก HTML คุณควรใช้สิ่งที่ชอบ:
$regEx = '\'(?!((<.*?)|(<a.*?)))(\b'. implode('|', $keys) . '\b)(?!(([^<>]*?)>)|([^>]*?</a>))\'iu';
$text = preg_replace($regEx, '<strong class="search-highlight">\0</strong>', $text);
preg_quote()
ไปใช้เพื่อ$keys
ป้องกันไม่ให้ regex ของคุณระเบิดในกรณีที่มีอักขระพิเศษเช่นวงเล็บหรือวงเล็บ