1

我使用 Wordpress 的 Timber 插件。

我创建了一个结果搜索页面。我想突出显示用户搜索的单词。

在 PHP 中,我写道:

$highlight = array();
if ($terms) {
    foreach($terms as $term) {
        array_push($highlight, '<span class="blue bold">'.$term.'</span>');
    }
}

而且,要替换 PHP 中的搜索词:

<p class="date red"><?php echo str_ireplace($terms, $highlight, get_field('subtitle_post')); ?></p

但我不知道如何在 Twig (Timber) 中转换它?

4

2 回答 2

2

您应该使用自定义树枝过滤器。

来自文档:扩展木材。(我试图使其适应您的示例,但您可能需要更改它)

/* functions.php */

add_filter('get_twig', 'add_to_twig');

function add_to_twig($twig) {
    /* this is where you can add your own fuctions to twig */
    $twig->addExtension(new Twig_Extension_StringLoader());
    $twig->addFilter(new Twig_SimpleFilter('highlight', 'highlight'));
    return $twig;
}

function highlight($text, array $terms) {

    $highlight = array();
    foreach($terms as $term) {
       $highlight[]= '<span class="blue bold">'.$term.'</span>';
    }

    return str_ireplace($terms, $highlight, $text);
}

然后你可以使用你的自定义过滤器

{{ yourField|highlight(words) }}
于 2016-12-29T14:47:55.157 回答
1

您可以使用 Twig 的 map 函数简单地突出显示给定的单词:

{% set sentence = 'The quick brown fox jumps over the lazy dog' %}
{% set highlight = ['the', 'quick', 'fox'] %}
{{ sentence|split(' ')|map( word => ( word|lower in highlight ? '<strong>' ~ word ~ '</strong>' : word ) )|join(' ') }}
于 2019-12-08T16:47:13.643 回答