正在使用标准的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>';
}
使用内容而不是摘录,所以它总是实际显示所需的单词,但我真的很喜欢修剪内容,所以搜索到的单词的任何一侧只有十几个单词,这是强大的上面代码中的标签。我对这一切都很陌生,但我希望有人可以指出我正确的方向,如果这样的修剪是可能的。
提前感谢您的帮助!!
答案 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;
}
答案 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>";
}
我已经测试了上面的代码并且它有效。您可能需要考虑添加更多逻辑以获得最大描述大小