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 );
Файл header.twig включен в 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
Может ли кто-нибудь помочь диагностировать проблему?
У меня были проблемы с меню «Древесина», и я, наконец, обнаружил, что ему не нравится название, содержащее тире. Я сменил custom-menu на custom_menu и начал работать.

Может быть, я начну с предоставления вам того, что использую в той же ситуации.
В 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 %}
+1, потому что этот пост заставил меня понять, что я вызвал TimberMenu с идентификатором меню Footer вместо ярлыка местоположения меню footercodex.wordpress.org/Function_Reference/register_nav_menus
Вы исправили ошибку? У меня такая же проблема с тобой. Спасибо.