Вторая навигация внутри заголовка


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

С моими навыками 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. Существуют ли лучшие решения для достижения моей цели, чем два вышеперечисленных подхода?

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

Author: Fayaz, 2017-03-02

1 answers

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

Структура для детального управления:

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

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

  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 ( добавьте столько, сколько вам нужно), вы будете управлять КОДОМ и разметкой только для этого Ману. Вам не нужно беспокоиться о других меню, их наценках или условиях. Если вам нужно новое меню, просто добавьте его, например, в файл nav-three.php, а затем добавьте необходимое условие для него в nav.php, если вы хотите добавить его в верхнее меню.

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

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

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

Примечание: Тема WordPress Двадцать семнадцать по умолчанию использует аналогичную структуру.

 1
Author: Fayaz, 2017-03-02 16:06:12