繁体   English   中英

在树枝/木材中突出显示搜索结果中的搜索词

[英]Highlight search terms in search results in Twig/Timber

我正在使用这个问题的答案Twig高亮单词(Timber插件)来更新该功能以在更新的Timber / Twig 2过滤器结构下工作。

但是我收到一个错误,“传递给{closure}()的参数2必须是数组类型,给定null”。

所以我知道我需要将搜索项传递给函数。 我怎么做?

是否可以在search-results.twig模板上从{{ search_query }}获取搜索词?

还是我可以从search.php以及该文件中的“ context”调用中获得的全局搜索术语,即$context['search_query'] = get_search_query();

我需要in search-results.twig中以标准方式使用过滤器,例如{{ content|highlight }}因为我在搜索结果标题和内容中有单独的字段,并且希望突出显示每个字段中的术语。

此功能functions.php目前抛出上面提到的错误:

add_filter('timber/twig', function($twig) {
   $twig->addExtension(new Twig_Extension_StringLoader());

   $twig->addFilter(
     new Twig_SimpleFilter(
       'highlight', 

function($text, array $terms) {

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

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

 )
   );

   return $twig;
});

更新:这有效

的functions.php:

add_filter('timber/twig', function($twig) {
   $twig->addExtension(new Twig_Extension_StringLoader());

   $twig->addFilter(
     new Twig_SimpleFilter(
       'highlight', 

function($text, array $terms) {

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

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

 )
   );

   return $twig;
});

并在search-results.twig中:

{% set searches = [ search_query ] %}

and

{{ content|highlight(search_query|split(' ')) }}

并在search.php中

$search_results = Timber::get_posts();
$context['search_query'] = get_search_query();

通过您想要这样突出显示的术语

{{ content | highlight(['foo', 'bar',]) }}

如果您只定义了一个术语,您可以这样做

{% set search = 'foo' %}
{{ content | highlight([ search, ]) }}

如果我是你,我将功能更改为此

function($text, $terms) {
    if (!is_array($terms)) $terms = [ $terms, ];
    $highlight = array();
    foreach($terms as $term) {
       $highlight[]= '<span class="highlight">'.$term.'</span>';
    }

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

然后,您可以通过一个或多个学期

{% set search = 'foo' %}
{{ content | highlight(search) }}

{% set searches = [ 'foo', 'bar', ] %}
{{ content | highlight(searches) }}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM