第二个导航内页标题

时间:2017-03-02 作者:Friedrich Siever

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

凭借我的初级PHP技能和对教程的研究,有两种解决方案似乎对我有效:

A) 在one and only main中添加条件标记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) 创建一个名为的新文件,例如。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 个回复
最合适的回答,由SO网友:Fayaz 整理而成

“最佳”总是主观的,但是,为了更好地控制和安排我的模板,我会用以下方式来表达:

有粒度控制的结构:

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

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

  1. nav.php: 这将作为主导航模板文件。它将包含两个菜单的条件和通用HTML包装标记。

  2. nav-one.php: 这将包含标记(&A);特定于主导航菜单(菜单一)的代码。

  3. nav-two.php: 这将包含特定于辅助导航菜单(菜单二)的标记和代码。

    这些文件将包含以下内容:

    nav.php file:

    <?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 file:

    <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 file:

    <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默认的2017主题使用类似的结构。

相关推荐

如何将Java脚本添加到Custom-Page.php模板?

如何将javascript添加到自定义页面。php模板?如何使从w3schools ajax教程获得的以下javascript在自定义页面上工作。php模板?任何帮助都将不胜感激。工作javascript包含在以下HTML中:<!DOCTYPE html> <html> <style> table,th,td { border : 1px solid black; border-collapse: collapse;&#x