Проблема при добавлении второго пользовательского меню в глобальный контекст - PullRequest
0 голосов
/ 11 октября 2018
Issue when adding second custom menu to global context - Unsupported operand types in /app/wp-content/plugins/timber-library/vendor/twig/twig/lib/Twig/Environment.php(462)

Я работаю над получением второго зарегистрированного меню и добавлением его в шаблон заголовка.Я использую плагин Timber с шаблонами Twig.

Я добавляю это второе меню в глобальный контекст:

$context['custom-menu'] = new Timber\Menu( 'Custom Menu' );

и вызываю меню в моем файле index.php.

$context = Timber::get_context();
$context['posts'] = new Timber\PostQuery();
$templates = array( 'index.twig' );
if ( is_home() ) {
    array_unshift( $templates, 'home.twig' );
}
Timber::render( $templates, $context );

Заголовок.файл ветки включен в base.twig, который расширен до index.twig.Это включает в себя все части заголовка.

{% include "partial/user-menu.twig" with {'custom-menu': custom-menu.get_items} %}
{% include "menu.twig" with {'menu': menu.get_items} %}
{% include "partial/sl_logo.twig" %}
{% include "partial/sl_search.twig" %}

Меню menu.twig прекрасно рендерится, но когда я добавляю пользовательское меню, в верхней части выводится сообщение об ошибке.Когда я удаляю with {'custom-menu': custom-menu.get_items}, выдается ошибка: Object of class Timber\Menu could not be converted to int

Файл user-menu.twig выглядит следующим образом:

    <ul>
    {% for item in custom-menu %}
        <li class="{{ item.classes | join(' ') }}">
            <a target="{{ item.target }}" href="{{ item.link }}">{{ item.title }}</a>
             {% include "user-menu.twig" with {'custom-menu': item.get_children} %}
        </li>
    {% endfor %}
    </ul>

Документация по репозиторию Timber Github предполагает, чтоВы можете добавить меню в глобальный контекст и просто добавить их, когда получите get_context.

https://github.com/timber/timber/blob/master/docs/guides/menus.md

Кто-нибудь может помочь диагностировать проблему?

1 Ответ

0 голосов
/ 16 октября 2018

Может быть, я начну с предоставления вам я использую в той же ситуации.

В functions.php добавить

function add_to_context( $data ){
    //menu
    $data['menu_primary'] = new TimberMenu( 'primary' );
    $data['menu_footer'] = new TimberMenu( 'footer' );
    return $data;
}

Следующее использование в нужном месте:

{% for item in menu_primary.get_items %}
...
{% endfor %}
...