2011-12-19 5 views
1

標準のWordpress検索で遊んで、このコードを関数ファイルで使用して、表示された結果コンテンツの検索用語を強調表示しています。Wordpress、スパンタグの周りに表示されたコンテンツをトリミング

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

それは常に、実際に必要な単語を示しているが、Idは実際にコンテンツをトリミングするが大好きなので、それがある、ちょうどダースかそこらの単語で検索語のいずれかの側だったので、内容ではなく、抜粋を使用しています上記のコードのstrongタグで保持されます。このすべてにはかなり新しいですが、そのような調整が可能なら誰かが正しい方向に向けることを望んでいます。

ご協力いただきありがとうございます。

答えて

0

私はあなたが表示したいとしていることを推測しています太字のすべての単語の最小値。これを行うには、一致する単語の最初と最後のインスタンスがどこにあるかを見つける必要があります。

function search_content_highlight() 
{ 
    $content = get_the_content(); 
    $keysArray = explode(' ', get_search_query()); 
    $keys = implode('|', $keysArray); 
    $content = preg_replace('/(' . $keys .')/iu', '<strong class="search-highlight">\0</strong>', $content); 
    $minLength = 150; //Number of Characters you want to display minimum 
    $start = -1; 
    $end = -1; 
    foreach($keysArray as $term) 
    { 
     $pos = strpos($content, $term); 
     if(!($pos === false)) 
     { 
      if($start == -1 || $pos<$start) 
       $start = $pos-33; //To take into account the <strong class="search-highlight"> 
      if($end == -1 || $pos+strlen($term)>$end) 
       $end = $pos+strlen($term)+9; //To take into account the full string and the </strong> 
     } 
    } 
    if(strlen($content) < $minLength) 
    { 
     $start = 0; 
     $end = strlen($content); 
    } 
    if($start == -1 && $end == -1) 
    { 
     $start =0; 
     $end = $minLength; 
    } 
    else if($start != -1 && $end == -1) 
    { 
     $start = ($start+$minLength <= strlen($content))?$start:strlen($content)-$minLength; 
     $end = $start + $minLength; 
    } 
    else if($start == -1 && $end !=-1) 
    { 
     $end = ($end-$minLength >= 0)?$end:$minLength; 
     $start = $end-$minLength; 
    } 
    echo "<p>".(($start !=0)?'...':'').substr($content,$start,$end-$start).(($end !=strlen($content))?'...':'')."</p>"; 
}  

私は上記のコードをテストしています。最大の説明サイズを持つためにロジックを追加することを検討することをお勧めします。

+0

ありがとうございました。あなたのコードJoshを使いました。ありがとう! –

0

なぜプラグインを使用しないのですか?

WordPress Highlight Search Terms

あなたが$content変数を切り捨てるために探している場合も、この機能を試してみてください。

function limit_text($text, $limit) { 
    if (strlen($text) > $limit) { 
     $words = str_word_count($text, 2); 
     $pos = array_keys($words); 
     $text = substr($text, 0, $pos[$limit]) . '...'; 
    } 

    return $text; 
} 

from here

関連する問題