Я работаю над ответом на этот вопрос Подсветка слова Twig (плагин Timber), чтобы обновите функцию, чтобы она работала в новой структуре фильтров Timber / Twig 2.
Но я получаю сообщение об ошибке: «Аргумент 2, переданный в {closure} (), должен иметь тип массива, задано значение null».
Итак, я знаю, что мне нужно передать поисковый запрос функции. Как я могу это сделать?
Получу ли я поисковый запрос от {{ search_query }}
в шаблоне search-results.twig
?
Или поисковые термины в глобальном списке, которые я могу получить из 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();