Wordpress,修剪跨度标记周围显示的内容

时间:2011-12-19 18:28:09

标签: php 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>';
}

使用内容而不是摘录,所以它总是实际显示所需的单词,但我真的很喜欢修剪内容,所以搜索到的单词的任何一侧只有十几个单词,这是强大的上面代码中的标签。我对这一切都很陌生,但我希望有人可以指出我正确的方向,如果这样的修剪是可能的。

提前感谢您的帮助!!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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>";   
}    

我已经测试了上面的代码并且它有效。您可能需要考虑添加更多逻辑以获得最大描述大小