私の目標は私のブログページのための二次メニューを提供することです(私は静的なホームページを持っています)。
私の初心者PHPスキルとチュートリアルの調査の結果、私には2つの解決策がうまくいっているようです。
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) /と呼ばれる新しいファイルを作成します。 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();
}
これが私の質問です。
上記の2つのアプローチよりも私の目標を達成するためのより良い解決策はありますか?
そうでない場合は、2つの解決策のどちらを選択しますか、またその理由は何ですか。
最良は常に主観的なものですが、私は自分のテンプレートをよりよく制御し、より適切に配置するために、次のようにしました。
まず、新しいフォルダを作成します。私のテーマのtemplate-parts
そしてその中の別のフォルダnavigation
(異なるフォルダーに別々のテンプレート部分を入れるため)。
それから<my-theme>/template-parts/navigation/
フォルダに3つのファイルを作成します。
nav.php
:これはメインのナビゲーションテンプレートファイルとして機能します。両方のメニューの条件と共通のHTMLラッパーマークアップが含まれます。
nav-one.php
:これは、プライマリナビゲーションメニュー(menu-one)に特有のマークアップとコードを含みます。
nav-two.php
:これには、セカンダリナビゲーションメニュー(menu-two)に固有のマークアップとコードが含まれます。
これらのファイルは次のような内容になります。
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
ファイルから簡単な一行のテンプレート呼び出しをするでしょう。あなたは異なるメニューを持つためだけに2つの異なるheader.php
ファイルで将来の変更を二度する必要はないでしょう。
nav.php
から、すべての異なるトップメニューに対して、すべての異なる条件および一般的なHTMLラッパーマークアップを制御できるようになります。別のページの別の2番目のトップメニューには、もうheader.php
ファイルを変更する必要はありません。
nav-one.php
、nav-two.php
(必要なだけ追加する)から、あなたはそのManuだけのためにCODEとマークアップをコントロールするでしょう。他のメニューやそれらのマークアップや状態について心配する必要はありません。あなたが新しいメニューが必要な場合は、単にそれを追加してください。トップメニューに追加したい場合はnav-three.php
ファイルをクリックしてからnav.php
に必要条件を追加してください。
これにより、同じファイル(メニュー)を別の場所でも使用できるようになります。たとえば、ナビゲーションメニューone
もフッターにする必要があります。フッターでは、呼び出す必要があります:get_template_part( 'template-parts/navigation/nav', 'one' );
それだけです、同じコードを2回書く必要はないでしょう。
この設定が完了したら、メニューシステムをはるかにきめ細かく制御できます。
注意:WordPressのデフォルトのTwenty Seventeenテーマも同様の構造を使用しています。