この記事の前提条件
対象: WordPress(テーマファイルの編集ができる環境)
難易度: ★★☆
所要時間: 約5分
固定ページのサブナビゲーション(「会社概要」「サービス一覧」「お問い合わせ」などの兄弟ページへのリンク一覧)を作った時、今まさに開いているページ自身までリンクとして表示されてしまうのは、ちょっと不格好です。今開いているページだけ除外する方法を紹介します。
wp_list_pages()のexcludeパラメータを使う
固定ページの一覧を出力するwp_list_pages()には、除外したいページIDを指定するexcludeパラメータが用意されています。ここに現在表示中のページIDを渡せば、自分自身だけを除外できます。
<?php
wp_list_pages( array(
'title_li' => '',
'exclude' => get_the_ID(), // 現在表示中のページを除外
) );
?>get_the_ID()は「今表示している投稿・固定ページのID」を返す関数です。ループの外(サイドバーのテンプレートファイルなど)で使う場合は、get_queried_object_id()に置き換えると安定して取得できます。
💡 「除外」より「グレーアウト」の方が親切なことも
サイト設計の観点では、完全にリンクを消してしまうより、「今ここにいます」と分かるようにCSSで強調表示する方が親切な場合もあります。wp_list_pages()は現在ページに自動で.current_page_itemというクラスを付与してくれるので、これをCSSで装飾すれば、リンクを残したまま「現在地」を分かりやすく示せます。ユーザーが今どこにいるか迷わせない、という観点ではこちらもおすすめの選択肢です。
まとめ
wp_list_pages( array( 'exclude' => get_the_ID() ) );で現在ページを除外できる- ループ外で使う場合は
get_queried_object_id()の方が安定する - 除外する代わりに
.current_page_itemクラスでグレーアウト表示にする方法も、UXの観点では有効