首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >第二次导航内标头

第二次导航内标头
EN

WordPress Development用户
提问于 2017-03-02 13:52:29
回答 1查看 1.3K关注 0票数 2

作为菜鸟,我的目标是为我的博客页面提供一个辅助菜单(我确实有一个静态主页),我想知道在模板文件中放置第二个导航的最佳方法是什么。

对于我的初级PHP技能,在对教程进行研究之后,有两种解决方案似乎适合我:

( A)在唯一的主header.php中添加一个条件标记:

代码语言:javascript
复制
<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)创建一个名为header-home.php的新文件,它是主header.php的副本,并将其集成到博客模板中。

header-home.php

代码语言:javascript
复制
<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),然后用以下条件启动它:

代码语言:javascript
复制
if( is_home() ) {
    get_header('home'); 

} else {
    get_header();
}

以下是我的问题:

  1. 是否有比上述两种方法更好的解决方案来实现我的目标?
  2. 如果没有,那么您更喜欢这两种解决方案中的哪一种?为什么?
EN

回答 1

WordPress Development用户

回答已采纳

发布于 2017-03-02 15:47:28

然而,最好总是主观的,但是,为了更好地控制和更好地安排我的模板,我会用以下方式:

有粒度控制的结构:

首先,我会创建一个新文件夹,例如主题中的template-parts,然后在其中创建另一个文件夹,例如navigation (在不同的文件夹中有单独的模板部件)。

然后,在<my-theme>/template-parts/navigation/文件夹中创建三个文件。

  1. nav.php:这将充当主导航模板文件。它将包含两个菜单的条件和通用的HTML包装标记。
  2. nav-one.php:这将包含特定于主导航菜单(菜单-1)的标记和代码。
  3. nav-two.php:这将包含特定于辅助导航菜单(菜单-2)的标记和代码。

这些文件的内容如下:

nav.php文件:

代码语言:javascript
复制
<?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文件:

代码语言:javascript
复制
<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文件:

代码语言:javascript
复制
<nav>
<?php 
    wp_nav_menu(array('theme_location' => 'two', 'menu_id' => 'menu-two'));
?>
</nav><!-- #secondary-navigation -->

最后,我简单地将其放在我的header.php文件中:

代码语言:javascript
复制
get_template_part( 'template-parts/navigation/nav' );

为什么?

  1. 您将从header.php文件中得到一个简单的一行模板调用&您不需要在两个不同的header.php文件中进行两次更改,只因为有不同的菜单。
  2. nav.php,您将能够控制所有不同的条件和一般的HTML包装标记所有不同的顶部菜单。对于另一个页面的另一个辅助顶部菜单,您将不再需要更改header.php文件。
  3. nav-one.phpnav-two.php (随您需要添加多少),您将只控制该Manu的代码和标记。您不需要担心其他菜单或其标记或条件。如果您需要一个新菜单,只需将其添加到例如nav-three.php文件中,然后在nav.php中添加必要的条件,如果要将其添加到顶部菜单中。
  4. 这样,您还可以在另一个位置使用相同的文件(菜单)。例如,您希望导航菜单one也在页脚中。然后在脚注中,只需调用:get_template_part( 'template-parts/navigation/nav', 'one' ); --仅此而已,您不需要编写相同的代码两次。

一旦您有了这个设置,您将有更好的粒度控制您的菜单系统。

注意: WordPress默认的二十七个主题使用类似的结构。

票数 1
EN
页面原文内容由WordPress Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://wordpress.stackexchange.com/questions/258584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档