Добавить пользовательский фильтр случайного перемещения в Timber / Twig

#php #arrays #filter #twig #timber

#php #массивы #Фильтр #twig #timber

Вопрос:

Я хочу перетасовать массив и добавил следующий фильтр в свой functions.php

     add_filter( 'timber/twig', function ( $twig ) {

        $twig->addFilter( new TimberTwig_Filter( 'shuffle', function ( $array ) {
            $shuffle = shuffle( $array );
            return $shuffle;
        } ) );

        return $twig;
    } );
  

Однако следующий код ничего не возвращает:

 {% for item in ["WordPress", "React", "Craft", "NodeJS", "Laravel", "Tailwind", "Vue", "Stencil"]|shuffle %}
     <h2 class="outline">{{ item }}</h2>
{% endfor %}
  

Комментарии:

1. Параметр «array» отправляется ссылкой на функцию shuffle , а сама функция возвращает true / false независимо от того, была ли перетасовка успешной или нет, а не фактический перетасованный массив

Ответ №1:

Следуя комментарию DarkBee, я заставил его работать со следующим кодом:

 add_filter( 'timber/twig', function ( $twig ) {

    $twig->addFilter( new TimberTwig_Filter( 'shuffle', function ( $array ) {
        shuffle( $array );
        $newArray = [];

        foreach ( $array as $item ) {
            array_push( $newArray, $item );
        }

        return $newArray;
    } ) );

    return $twig;
} );