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



对于我的WordPress搜索结果页面,我添加了高亮显示来显示搜索词出现在结果页面的位置。但是替换代码将页面的文本更改为大小写这是在搜索词中使用的

例如:

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
以下是我在content-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">$0</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"></span>', $title); ?>
<?php $excerpt = get_the_excerpt(); $keys= explode(" ",$s); $excerpt = preg_replace('/('.implode('|', $keys) .')/iu', '<span class="search-instance"></span>', $excerpt); ?>

相关内容

最新更新