現在のページを除外してページ一覧を出す方法【WordPress】

この記事の前提条件

対象: 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の観点では有効