วิธีไฮไลต์คำค้นหาที่ไม่มีปลั๊กอิน


15

ฉันจะรับไฮไลต์ข้อความค้นหาที่ไม่มีปลั๊กอินได้อย่างไร

คำตอบ:


14

เพิ่ม 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  
    }

3
นำpreg_quote()ไปใช้เพื่อ$keysป้องกันไม่ให้ regex ของคุณระเบิดในกรณีที่มีอักขระพิเศษเช่นวงเล็บหรือวงเล็บ
Geert

1
สิ่งที่เกี่ยวกับการเน้นคำค้นหาหลังจากที่ผู้ใช้คลิกที่เดียวและไปในโพสต์? จากนั้นget_search_query ()ส่งคืนสตริงว่าง
Maor Barazany

1
สิ่งเหล่านั้นควรเป็นตัวกรองสำหรับthe_excerptและthe_contentแทน อย่างไรก็ตาม: คำตอบที่ดี แต่ความคิดเห็นจาก @Geert อาจจะทำงานใน :)
Kaiser

1
มันใช้โค้ด <strong class = "search-highlight"> ในลิงก์ readmore ของเราเช่นกันหากมันมีข้อความค้นหาเราจะแก้ไขได้อย่างไร

1
มันจะแทนที่ข้อความใน readmore href ด้วยหรือไม่ จะแก้ไขได้อย่างไร?
Naveen

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
เพื่อนคุณ thanxs ทำวันของฉัน :-)
Agha Umair Ahmed
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.