Wordpress, обрезка отображаемого содержимого вокруг тега span - PullRequest
1 голос
/ 19 декабря 2011

Играю со стандартным поиском 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>';
}

Я использую контент, а не отрывок, поэтому он всегда показывает нужное слово, но я действительно хотел бы обрезать контент, так что это было всего лишь дюжина или около того слов по обе стороны от искомого слова, которое содержится в сильном теги в приведенном выше коде. Я довольно новичок во всем этом, но надеюсь, что кто-то может указать мне правильное направление, если такая обрезка возможна.

Заранее спасибо за любую помощь !!

Ответы [ 2 ]

0 голосов
/ 19 декабря 2011

Я предполагаю, что вы захотите показать минимум всех жирных слов.Для этого вам нужно найти, где вы найдете первый и последний экземпляр соответствующего слова.

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 голосов
/ 19 декабря 2011

Почему бы просто не использовать плагин?

Условия поиска в WordPress

Также, если вы хотите обрезать переменную $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;
}

отсюда

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...