Вторая навигация внутри заголовка
Как новичок, моя цель - предоставить дополнительное меню для моей страницы блога (у меня есть статическая домашняя страница), и мне интересно, как лучше всего разместить вторую навигацию в файлах шаблонов.
С моими навыками 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 } ?>
Б) Создайте новый файл, который называется, например, 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 answers
Лучшее всегда субъективно, однако я бы сформулировал это следующим образом, чтобы иметь лучший контроль и лучшее расположение моих шаблонов:
Структура для детального управления:
Сначала я бы создал новую папку, например template-parts
в своей теме, а затем внутри нее другую папку, напримерnavigation
(чтобы иметь отдельные части шаблона в разных папках).
Затем в папке <my-theme>/template-parts/navigation/
я создам три файла, например
nav.php
: это будет выступать в качестве основного файл шаблона навигации. Он будет содержать условные обозначения и общую разметку HTML-оболочки для обоих меню.nav-one.php
: это будет содержать разметку и КОД, специфичные для основного меню навигации (меню-один).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' );
Почему?
У вас будет простой вызов шаблона в одну строку из файла
header.php
, и вам не нужно будет вносить будущие изменения дважды в два разных файлаheader.php
только для разных меню.Из
nav.php
вы сможете управлять всеми различными условиями и общими разметками HTML-оболочки для всех различных верхних меню. Для другое дополнительное верхнее меню для другой страницы, вам больше не нужно будет изменять файлheader.php
.От
nav-one.php
,nav-two.php
( добавьте столько, сколько вам нужно), вы будете управлять КОДОМ и разметкой только для этого Ману. Вам не нужно беспокоиться о других меню, их наценках или условиях. Если вам нужно новое меню, просто добавьте его, например, в файлnav-three.php
, а затем добавьте необходимое условие для него вnav.php
, если вы хотите добавить его в верхнее меню.-
Таким образом, вы также сможете использовать тот же файл (меню) в другом месте. Например, вы хотите, чтобы навигационное меню
one
также находилось в нижнем колонтитуле. Затем в нижнем колонтитуле вам нужно будет только позвонить:get_template_part( 'template-parts/navigation/nav', 'one' );
Вот и все, вам не нужно будет писать один и тот же КОД дважды.
Как только вы выполните эту настройку, у вас будет гораздо лучший детальный контроль над вашей системой меню.
Примечание: Тема WordPress Двадцать семнадцать по умолчанию использует аналогичную структуру.