Intereting Posts
Как извлечь изображение галереи из базы данных? Пользовательская кнопка общего доступа Facebook с настраиваемым заголовком, URL-адресом, изображением в wordpress Использование wp_send_json_success и wp_redirect одновременно мета-окно на пользовательском типе сообщения Меню Wp добавить ссылку на страницу как пользовательскую пустую ссылку Добавить в список вложений в галерею, за исключением того, что используется в качестве миниатюры сообщения Цикл в сообщениях категории ID для сообщений / страниц блога Разработка плагинов: get_post_meta не работает Загрузите несколько изображений с помощью media_handle_upload с несколькими полями файлов Вызвать заголовок wp-blog-header.php без выполнения wp_query Как исключить страницы из результатов поиска Фильтр WP_NAV_MENU предназначен для всех меню Отфильтруйте комментарии с помощью определенных мета-ключей / ов в бэкэнде администратора обновить путь изображения со словами, начинающимися в верхнем регистре до строчных символов

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

Как 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 использует аналогичную структуру.