WordPress:突出显示搜索结果 - 但保持与页面上最初相同的大小写

WordPress: Highlight search results - but keeping the same case as was originally on the page

对于我的 WordPress 搜索结果页面,我添加了突出显示以显示搜索词出现在结果页面上的位置。但是替换代码将页面文本更改为搜索词中使用的 case

例如:

Search Term:                                      remote Employee ENGAGE 
Text on Page before highlight:                    Remote employee engagement 
Resulting text after highlight replacement:       remote Employee ENGAGEment
Desired text after highlight replacement:         Remote employee engagement

这是我在内容中使用的代码-search.php

<?php $title = str_ireplace( $s, '<span class="search-instance">'.$s.'</span>', get_the_title() ) ?>
<?php $excerpt = str_ireplace( $s, '<span class="search-instance">'.$s.'</span>', get_the_excerpt() ) ?> 
<?php echo $title; ?>   
<?php echo $excerpt; ?>

和 css 突出显示文本:

span.search-instance {
   font-weight: bold;
   background: #fffdca;
   padding: 2px;
}

有人可以提供一些关于如何通过不区分大小写的搜索完成突出显示的建议,而且在突出显示过程中不更改页面上文本的大小写。

干杯, SunnyOz

更新:

我不认为我可以用 str_ireplace 做我想做的事。

我想我可能需要将 preg_replace 与一些 regex 一起使用,这也 允许部分匹配 (即:不限于匹配单词边界)- 但我不知道如何在我的代码示例中设置它。

如果我确实需要使用 preg_replace 而不是 str_ireplace,我仍然需要一些帮助。

如何使用 不区分大小写 搜索 get_the_title()get_the_excerpt() 使用的搜索词 - 使用 preg_replace

试试这个

$string = 'Test test REmotE emPloYee engAgeMent end string ';
$keys = array('remote Employee ENGAGE');

$patterns = array();

foreach($keys as $key) {    
$patterns[] = '/\b('.$key.'([^ ]*))\b/i';
echo preg_replace($patterns, '<span class="search-instance">[=10=]</span>', $string);
}

你的代码有什么问题,你正在寻找一个短语并进行替换。 在这种情况下,我们需要在字符串中找到一个模式,如果某些内容与该模式匹配,则用标签包装该匹配项。

我确实找到了一种方法来做我想做的事。我从这个页面找到了解决方案:https://www.wpbeginner.com/wp-tutorials/how-to-highlight-the-search-terms-in-results-in-wordpress/

这是我更改的新代码:

<?php $title = get_the_title(); $keys= explode(" ",$s); $title = preg_replace('/('.implode('|', $keys) .')/iu', '<span class="search-instance">[=10=]</span>', $title); ?>
<?php $excerpt = get_the_excerpt(); $keys= explode(" ",$s); $excerpt = preg_replace('/('.implode('|', $keys) .')/iu', '<span class="search-instance">[=10=]</span>', $excerpt); ?>