つまり同じメニューをクリックしても『トップページ』と『トップページ以外』では別の動きをするということですね。
トップページとトップページ以外でヘッダーを分ければいいのですが、WordPressの場合はヘッダーは『header.php』など共通のパーツとするので、トップページと下層ページではなるべく同じコードにしたいところです(分けるときもありますが)
かなりマニアックな話のように見えますが、実務でも使う事があるので解説します。
(有料になっていたらすいません🙇♂️)
トップページではページ内リンク、下層ページではトップページの特定の位置に遷移
今回のイメージはヘッダーメニューに『ABOUT』というメニューがあり、これはトップページ内にあるABOUTセクションに遷移するという想定です。
順番に解説していきます。
トップページ内でクリックした場合
トップページでこのメニューをクリック場合、ページ内リンクでスルスルっとABOUTセクションまで移動するイメージです。
ページ内リンクのスムーススクロールについては以下の記事を参照下さい。
【コピペOK!】jQueryを使ったスムーススクロールで移動するページ内リンクの作り方
続きを見る
この場合はメニューのaタグは以下になります。
<!-- トップページのヘッダーメニュー -->
<a href="#about">ABOUT</a>
遷移先はこのようにidを付けます。
<!-- トップページ -->
<section id="about">
コンテンツ
</section>
トップページ以外でクリックした場合
他のページでクリックした場合は、トップページのABOUTセクションまで遷移します。
ここで重要なのが、ただトップページに移動するだけでなく、トップページのABOUTセクションの位置に遷移するという事です。
別ページの指定した場所に遷移する方法は以下の記事を参照下さい。
別ページの特定の場所に遷移するアンカーリンクの設定方法【WordPressも解説】
続きを見る
この場合はメニューのaタグは以下になります。
<!-- トップページ以外のヘッダーメニュー -->
<a href="<?php echo esc_url( home_url( '/' ) ); ?>#about">ABOUT</a>
遷移先については先ほどと同じです。
<!-- トップページ -->
<section id="about">
コンテンツ
</section>
条件分岐を使ってトップページと下層ページを分ける
それでは先ほどの2つのパターンを条件分岐を使って振り分けたいと思います。
まずはトップページの場合はaタグがこちらになるようにして、
<a href="#about">ABOUT</a>
トップページ以外の場合はaタグがこちらになるようにします。
<a href="<?php echo esc_url( home_url( '/' ) ); ?>#about">ABOUT</a>
これを条件分岐を使うと以下になります。
<a href="<?php if ( is_front_page() ) : ?>#about<?php else: ?><?php echo esc_url( home_url( '/' ) ); ?>#about<?php endif;?>">ABOUT</a>
ちょっと長いのですが、こちらが『トップページの場合』という意味になります(front-page.phpをトップページとしている場合)
<?php if ( is_front_page() ) : ?>
そしてトップページの場合の内容が『#about』になります。
そしてこちらが『もしそうでない場合』という意味で、ここでは『トップページではない場合』となります。
<?php else: ?>
そしてトップページではない場合の内容が<?php echo esc_url( home_url( '/' ) ); ?>/#about
になります。
まとめ
今回はWordPressのトップページではページ内リンク、下層ページからはトップページの特定の位置に遷移する方法を解説しました。
条件分岐を使えば無駄にテンプレートを増やさずに済むので、ぜひ活用してみて下さい。
以上になります。
【コピペOK!】よく使うWordPress条件分岐タグまとめ
続きを見る
別ページの特定の場所に遷移するアンカーリンクの設定方法【WordPressも解説】
続きを見る
【WordPress】条件分岐で特定の固定ページのみclassやidを付ける方法
続きを見る