【发布时间】:2019-03-01 08:02:06
【问题描述】:
我正在处理这个问题的答案Twig highlight word (Timber plugin),以更新该函数以在较新的 Timber/Twig 2 过滤器结构下工作。
但我收到“传递给 {closure}() 的参数 2 必须是数组类型,给定 null”的错误。
所以我知道我需要将搜索词传递给函数。我该怎么做?
我是否可以在 search-results.twig 模板上从 {{ search_query }} 获取搜索词?
或者是我可以从search.php 和该文件中的“上下文”调用(即$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 }} 这样的标准过滤器。