Intereting Posts
как сделать персонализированные сообщения липкими? Получить ссылку в файле вложения Почему я могу загружать файлы, но мне нужен FTP-вход для плагинов Маршрут к настраиваемому файлу Woocommerce – сообщение об ошибке Разрешения пользователя для загрузки изображений Группировка и просмотр страниц CPT по месяцам с пользовательской полевой датой Как работают почтовые идентификаторы в WordPress? Отображать теги из определенной категории в выбранных полях Объект получает нежелательную ширину и высоту Поиск wp_query не содержит ключевых слов для нескольких слов Это правильный способ добавить jquery и css в wordpress? URL-адрес пользовательского почтового адреса больше не работает Использование get_terms () для перечисления терминов из одной пользовательской таксономии И из одной конкретной встроенной категории Отображать содержимое настраиваемого поля новой публикации на главной странице, ежедневно

Вторая внутренняя вставка навигации

Как noob моя цель – предоставить вторичное меню для моей страницы блога (у меня есть статическая домашняя страница), и мне интересно, что лучше всего разместить вторую навигацию в файлах шаблонов.

С моими навыками начинающего PHP и после изучения учебников для меня работают два решения:

A) Добавить условный тег в один и только главный header.php :

 <nav id="site-navigation" class="main-navigation" role="navigation"> <?php wp_nav_menu(array('theme_location' => 'menu-1', 'menu_id' => 'primary-menu')); ?> </nav><!-- #site-navigation --> <!-- my Secondary Menu solution one --> <?php if (is_home()) { ?> <nav> <?php wp_nav_menu(array('theme_location' => 'menu-2', 'menu_id' => 'menu-2')); ?> </nav> <?php } ?> 

B) Создайте новый файл, который называется eg header-home.php который является копией основного header.php и интегрирует его в шаблон блога.

header-home.php :

 <nav id="site-navigation" class="main-navigation" role="navigation"> <?php wp_nav_menu(array('theme_location' => 'menu-1', 'menu_id' => 'primary-menu')); ?> </nav><!-- #site-navigation --> <!-- my Secondary Menu Solution 2 --> <nav> <?php wp_nav_menu(array('theme_location' => 'menu-2', 'menu_id' => 'menu-2')); ?> </nav> 

Чем я должен был бы изменить файл шаблона (в моем случае index.php ) и запустить его с этим условием:

 if( is_home() ) { get_header('home'); } else { get_header(); } 

Вот мои вопросы:

  1. Есть ли лучшие решения для достижения моей цели, чем два подхода выше?

  2. Если нет, то какое из двух решений вы бы предпочли и почему?

Solutions Collecting From Web of "Вторая внутренняя вставка навигации"

Лучшее всегда субъективно, однако я бы поставил его следующим образом, чтобы лучше контролировать и улучшать расположение моих шаблонов:

Структура, которая имеет гранулированный контроль:

Во-первых, я бы создал новую папку, например, template-parts в моей теме, а затем внутри нее, другую папку, например, navigation (чтобы иметь отдельные части шаблона в разных папках).

Затем, в папке <my-theme>/template-parts/navigation/ folder, я создам три файла, например

  1. nav.php : это будет основной файл шаблона навигации. Он будет содержать условные обозначения и общую разметку HTML-обложки для обоих меню.

  2. nav-one.php : это будет содержать разметку и код, характерные для основного меню навигации (меню-один).

  3. nav-two.php : это будет содержать разметку и КОД, специфичные для дополнительного навигационного меню (меню-два).

Эти файлы будут иметь следующий контент:

Файл nav.php :

 <?php if ( has_nav_menu( 'one' ) ) : ?> <div class="navigation-one"> <div class="wrap"> <?php get_template_part( 'template-parts/navigation/nav', 'one' ); ?> </div><!-- .wrap --> </div><!-- .navigation-one --> <?php endif; ?> <?php if ( has_nav_menu( 'two' ) && is_home() ) : ?> <div class="navigation-two"> <div class="wrap"> <?php get_template_part( 'template-parts/navigation/nav', 'two' ); ?> </div><!-- .wrap --> </div><!-- .navigation-two --> <?php endif; ?> 

Файл nav-one.php :

 <nav id="site-navigation" class="main-navigation" role="navigation"> <?php wp_nav_menu(array('theme_location' => 'one', 'menu_id' => 'menu-one')); ?> </nav><!-- #site-navigation --> 

Файл nav-two.php :

 <nav> <?php wp_nav_menu(array('theme_location' => 'two', 'menu_id' => 'menu-two')); ?> </nav><!-- #secondary-navigation --> 

Наконец, я просто поместил это в файл header.php :

 get_template_part( 'template-parts/navigation/nav' ); 

Зачем?

  1. У вас будет простой вызов из одной строки из файла header.php и вам не придется дважды вносить изменения в два разных файла header.php только для разных меню.

  2. Из nav.php вы сможете контролировать все различные условия и общие разметки HTML-оберток для всех разных верхних меню. Для другого дополнительного верхнего меню для другой страницы вам больше не нужно будет изменять файл header.php .

  3. Из nav-one.php , nav-two.php (добавьте столько, сколько вам нужно), вы будете контролировать CODE и разметку только для этого Manu. Вам не нужно беспокоиться о других меню или их разметках или условиях. Если вам нужно новое меню, просто добавьте его, например, файл nav-three.php а затем добавьте необходимое условие для него в nav.php если вы хотите добавить его в верхнее меню.

  4. Таким образом, вы также сможете использовать один и тот же файл (меню) в другом месте. Например, вы хотите, чтобы навигационное меню тоже было в нижнем колонтитуле. Затем в нижнем колонтитуле вам нужно будет только позвонить: get_template_part( 'template-parts/navigation/nav', 'one' );

    Вот и все, вам не нужно будет писать один и тот же код дважды.

После того, как вы установили эту настройку, у вас будет намного лучший контроль над вашей системой меню.

Примечание. Тема WordPress по умолчанию Twenty Seventeen использует аналогичную структуру.