Eklentisiz arama terimleri nasıl vurgulanır?


15

Arama terimlerini eklenti olmadan nasıl vurgulayabilirim?

Yanıtlar:


14

Bu 2 işlevi işlevlerinize ekleyin. 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;
}

Düzenle:

Arama sonuçlarınızda the_content öğesini kullanmak için aşağıdaki işlevi kullanın:

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

Döngü veya search.php dosya <?php search_title_highlight(); ?>yerine bunun yerine çağırın <?php the_title(); ?>ve <?php search_excerpt_highlight(); ?>yerine kullanın<?php the_excerpt(); ?>

Css'nize, aranan tüm kelimeleri sarı renkte vurgulayacak olan arama-vurgu sınıfını ekleyin.

.search-highlight {
    background:#FFFF00  
    }

3
Uygula preg_quote()için $keysparantez içinde veya parantez gibi özel karakterler durumunda havaya uçurmak adresinin normal ifade engellemek için.
Geert

1
Kullanıcı single'ı tıklayıp gönderinin içine girdikten sonra arama terimini vurgulamaya ne dersiniz? Sonra get_search_query () boş bir dize döndürür
Maor Barazany

1
Bunlar the_excerptve the_contentyerine filtreler olmalıdır . Her neyse: Güzel cevap, ancak @Geert'in yorumu işe yarayabilir :)
kaiser

1
Arama terimi varsa, bunu nasıl çözebiliriz <read class = "search-vurgu"> kodunu da geçerlidir.

1
ayrıca readmore href içindeki metni mi değiştiriyor? bu nasıl düzeltilir?
Naveen

3

Yukarıdaki iyi çalışır benzer kodu çalıştırın, ancak başlık kravat ve birlikte alıntı. Ancak, birisi arama sorgusu teriminin başında veya sonunda bir alana "" girdiğinde son buluyor.

Bu satırı ekliyorum:

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

Umarım bu başkalarına yardım eder.


2

Arama terimi HTML etiketlerinin içinde görünüyorsa yukarıdaki çözümler sayfayı kırar. Şöyle bir şey kullanmalısınız:

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

1
günümüzü yaptığınız teşekkürler dostum :-)
Agha Umair Ahmed
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.