Выделите условия поиска в результатах поиска в Twig / Timber - PullRequest
0 голосов
/ 25 сентября 2018

Я работаю с ответом на этот вопрос Слово выделения веток (плагин Timber) , чтобы обновить функцию для работы в более новой структуре фильтра Timber / Twig 2.

Но я получаю сообщение об ошибке, что «Аргумент 2, переданный в {closure} (), должен иметь тип массива, данный ноль».

Так что я знаю, что мне нужно передатьпоиск термина (ов) для функции.Как мне это сделать?

Могу ли я получить поисковые термины из {{ search_query }} в шаблоне search-results.twig?

Или поисковый термин (и) в глобальном масштабе, который я могуполучить от 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();

1 Ответ

0 голосов
/ 25 сентября 2018

Передайте термины, которые вы хотите выделить следующим образом:

{{ 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) }}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...