Cara menyorot istilah pencarian tanpa plugin

15

Bagaimana saya bisa mendapatkan istilah pencarian disorot tanpa plugin?

tp
sumber

Jawaban:

14

Tambahkan 2 fungsi ini ke functions.php Anda

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:

Untuk menggunakan konten untuk hasil pencarian Anda gunakan fungsi di bawah ini:

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>';
    }

Dalam loop Anda atau panggilan file search.php <?php search_title_highlight(); ?>bukan <?php the_title(); ?>dan gunakan <?php search_excerpt_highlight(); ?>sebagai gantinya<?php the_excerpt(); ?>

Di css Anda tambahkan kelas sorot pencarian yang akan menyorot semua kata yang dicari dengan warna kuning.

.search-highlight {
    background:#FFFF00  
    }
Chris_O
sumber
3
Berlaku preg_quote()untuk $keysmencegah regex Anda meledak jika karakter khusus seperti tanda kurung atau tanda kurung.
Geert
1
Bagaimana dengan menyoroti istilah pencarian setelah pengguna mengklik pada single dan masuk ke dalam posting? Kemudian get_search_query () mengembalikan string kosong
Maor Barazany
1
Itu harus menjadi filter untuk the_excerptdan the_contentsebagai gantinya. Pokoknya: Jawaban yang bagus, tetapi komentar dari @ Geert dapat dikerjakan :)
kaiser
1
Ini menerapkan kode <strong class = "search-highlight"> di tautan readmore kami juga jika memiliki istilah pencarian, Bagaimana kami bisa menyelesaikannya.
1
itu mengganti teks di readmore href juga? bagaimana cara memperbaikinya?
Naveen
3

Di atas berfungsi dengan baik saya sudah menjalankan kode yang sama, tetapi ikat judul dan kutipannya bersama-sama. Tetapi menemukan itu rusak ketika seseorang memasuki ruang "" baik di awal atau akhir dari istilah permintaan pencarian.

Jadi saya sudah menambahkan baris ini:

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

Semoga ini terbukti membantu orang lain.

Kyzer
sumber
2

Solusi di atas memecah halaman jika istilah pencarian muncul di dalam tag HTML. Anda harus menggunakan sesuatu seperti:

      $regEx = '\'(?!((<.*?)|(<a.*?)))(\b'. implode('|', $keys) . '\b)(?!(([^<>]*?)>)|([^>]*?</a>))\'iu';
      $text = preg_replace($regEx, '<strong class="search-highlight">\0</strong>', $text);
TAH
sumber
1
thanxs mate kamu buat hariku :-)
Agha Umair Ahmed