Поддержка Проблемы и решения Вывод верхнего меню

  • Всем привет!
    Помогите разобраться с меню. Не получается его вывести в шаблоне.

    В functions.php прописал:

    add_theme_support( menus );
    register_nav_menus(array(
    	'top'    => 'Верхнее меню',    //Название месторасположения меню в шаблоне
    	'bottom' => 'Нижнее меню'      //Название другого месторасположения меню в шаблоне
    ));
    $args = array(
    	'menu'            => 'top',              // (string) Название выводимого меню (указывается в админке при создании меню, приоритетнее 
    										  // чем указанное местоположение theme_location - если указано, то параметр theme_location игнорируется)
    	'container'       => 'div',           // (string) Контейнер меню. Обворачиватель ul. Указывается тег контейнера (по умолчанию в тег div)
    	'container_class' => 'navbar-collapse collapse',              // (string) class контейнера (div тега)
    	'container_id'    => 'navbar',              // (string) id контейнера (div тега)
    	'menu_class'      => 'nav navbar-nav main-nav menu-scroll',          // (string) class самого меню (ul тега)
    	'menu_id'         => 'top-menu',              // (string) id самого меню (ul тега)
    	'echo'            => true,            // (boolean) Выводить на экран или возвращать для обработки
    	'fallback_cb'     => 'wp_page_menu',  // (string) Используемая (резервная) функция, если меню не существует (не удалось получить)
    	'before'          => '',              // (string) Текст перед <a> каждой ссылки
    	'after'           => '',              // (string) Текст после </a> каждой ссылки
    	'link_before'     => '',              // (string) Текст перед анкором (текстом) ссылки
    	'link_after'      => '',              // (string) Текст после анкора (текста) ссылки
    	'depth'           => 0,               // (integer) Глубина вложенности (0 - неограничена, 2 - двухуровневое меню)
    	'walker'          => '',              // (object) Класс собирающий меню. Default: new Walker_Nav_Menu
    	'theme_location'  => 'top'               // (string) Расположение меню в шаблоне. (указывается ключ которым было зарегистрировано меню в функции register_nav_menus)
    );
    

    В шаблоне:

    <div id="navbar" class="navbar-collapse collapse">
              <ul id="top-menu" class="nav navbar-nav main-nav menu-scroll">
               <?php 
                    wp_nav_menu( array(
                        'menu_class'=>'menu',
                        'theme_location'=>'top',
                        'after'=>' /'
                    ) );
                ?>
              </ul>                            
            </div>

    При текущих изменениях сайт не прогружается — бесконечно грузится.

    Что не так указал?

Просмотр 13 ответов — с 1 по 13 (всего 13)
  • все. начиная с первой строчки:

    
    add_theme_support( menus );
    

    заканчивая тем, что указанные $args не используются в register_nav_menus.

    А что указывать в add_theme_support? (array $args)?

    Что в остальных не так указал? Там же просто нужно указать диви и идентификаторы или в самом шаблоне не так прописал?

    
    add_theme_support( menus );
    

    надо вообще удалить — во-первых, надо было писать 'menus', а не menus, а во-вторых, эта строчка вообще не требуется, так как register_nav_menus сам регистрирует поддержку меню в теме.

    и второе — ваши $args надо указывать в функции wp_nav_menu, но вам оно там не надо, можно минимально обойтись:

    
    <?php wp_nav_menu('theme_location=top'); ?>
    
    • Ответ изменён 7 лет, 2 месяца назад пользователем Flector.
    • Ответ изменён 7 лет, 2 месяца назад пользователем Flector.

    В functions оставил так:

    register_nav_menus(array(
    	'top'    => 'Верхнее меню',    //Название месторасположения меню в шаблоне
    	'bottom' => 'Боковое меню'      //Название другого месторасположения меню в шаблоне
    ));

    И в шаблоне:

    <div id="navbar" class="navbar-collapse collapse">
              <ul id="top-menu" class="nav navbar-nav main-nav menu-scroll">
               <?php wp_nav_menu('theme_location=top'); ?>
              </ul>                            
            </div>

    Всё ровно, бесконечно грузится сайт.
    Возможно, в register_nav_menus нужно указать диви и идентификаторы меню? Они подойдут: `
    ‘container’ => ‘div’,
    ‘container_class’ => ‘navbar-collapse collapse’,
    ‘container_id’ => ‘navbar’,
    ‘menu_class’ => ‘nav navbar-nav main-nav menu-scroll’,
    ‘menu_id’ => ‘top-menu’,
    ‘echo’ => true, `?

    в логах ошибок посмотрите, что не так.

    Как я понимаю, $location — это название в register_nav_menu. В моем случае, это ‘top’, а вот $description где можно посмотреть? Ведь это, как я понял, то, что будет показываться, если нет ‘top'($location).
    Прописал так — не отображается меню.

    <div id="navbar" class="navbar-collapse collapse">
              <ul id="top-menu" class="nav navbar-nav main-nav menu-scroll">
               <?php register_nav_menu( 'top', 'top' ); ?>
              </ul>                            
            </div>

    В functions.php:
    register_nav_menus(array(
    ‘top’ => ‘Верхнее меню’, //Название месторасположения меню в шаблоне
    ‘bottom’ => ‘Боковое меню’ //Название другого месторасположения меню в шаблоне
    ));

    function theme_register_nav_menu() {
    register_nav_menu( ‘top’, ‘Верхнее меню’ );
    }
    add_action( ‘after_setup_theme’, ‘theme_register_nav_menu’ );

    Пробовал и так в шаблоне прописать:

    <div id="navbar" class="navbar-collapse collapse">
              <ul id="top-menu" class="nav navbar-nav main-nav menu-scroll">
               <?php theme_register_nav_menu(); ?>
              </ul>                            
            </div>

    Сайт прогружается, но менюшки нету.

    • Ответ изменён 7 лет, 2 месяца назад пользователем Acme1994.
    • Ответ изменён 7 лет, 2 месяца назад пользователем Acme1994.

    вы кодекс вообще не смотрите?
    для вывода есть только wp_nav_menu, причем тут register_nav_menu и theme_register_nav_menu?
    скопируйте код из любой дефолтной темы и не изобретайте велосипед.

    Смотрю.
    Взял меню из дефолтного шаблона twentyfourteen.
    В шаблоне прописал:

    <div id="navbar" class="navbar-collapse collapse">
              <ul id="top-menu" class="nav navbar-nav main-nav menu-scroll">
                  <?php wp_nav_menu( array( 'theme_location' => 'primary', 'menu_class' => 'nav-menu', 'menu_id' => 'primary-menu' ) ); ?>     
              </ul>                            
            </div>

    В functions.php:

      register_nav_menus( array(
    		'primary'   => __( 'Top primary menu', 'RexAV' ),
    		'secondary' => __( 'Secondary menu in right sidebar', 'RexAV' ),
    	) );

    Консоль:
    screan

    Всё еще никак не могу понять как подключить меню… Читаю различные статьи, переписываю оттуда код — результат один и тот же. 🙁

    Разобрался. Только остался последний вопрос. Как сделать, чтобы при нахождении, к примеру, на главной странице — выделялся жирным шрифт?

    в классах меню добавляется current — вот и стилизуйте как надо в стилях.

     <?php if ( has_nav_menu( 'primary' ) ) : ?>
    
    					<div id="navbar" class="navbar-collapse collapse">
    						<?php if ( has_nav_menu( 'primary' ) ) : ?>
    							<ul id="top-menu" class="nav navbar-nav main-nav menu-scroll current" role="navigation" aria-label="<?php esc_attr_e( 'Верхнее меню', 'RexAV' ); ?>">
    								<?php
    									wp_nav_menu();
    								?>
    							</ul><!-- .main-navigation -->
    						<?php endif; ?>
    
    					</div><!-- .site-header-menu -->
    				<?php endif; ?>

    Добавил current, в стилях прописал font-weight: bold и, как я и предполагал, выделяет весь текст жирным шрифтом. Как можно обозначить активную ссылку?

    Вопрос решен.
    Нужно было добавить:

    .main-nav .current-menu-item > a,
    .main-nav .current-menu-ancestor > a {
    	font-weight: 700;
    }

    Спасибо, Flector, за наводку! 🙂

Просмотр 13 ответов — с 1 по 13 (всего 13)
  • Тема «Вывод верхнего меню» закрыта для новых ответов.