WordPress 固定ページ一覧の表示方法

WordPress で固定ページ一覧を表示する方法を紹介します。
例えば、サイトマップで固定ページ一覧を表示したいときに便利な方法です。

  1. テンプレートタグ wp_list_pages() を使った表示方法
    1. リストの見出しを非表示または変更する方法
    2. 指定したIDの子ページ一覧を表示する方法
    3. スラッグからIDを取得して子ページ一覧を表示する方法
    4. 特定のページを除外する方法
    5. 投稿タイプを指定する方法
  2. テンプレートタグ get_posts を使った表示方法

テンプレートタグ wp_list_pages() を使った表示方法

WordPress のテンプレートタグ wp_list_pages() は固定ページへのリンクリストを表示します。
次のコードは、固定ページのリンクリストを表示する方法です。

<ul>
<?php wp_list_pages(); ?>
</ul>

例えば、固定ページに紐づく子・孫ページがあるとき、HTML は次のように生成されます。

<ul>
<li class="pagenav">
固定ページ
<ul>
<li class="page_item page-item-1111"><a href="#">ページ</a></li>
<li class="page_item page-item-2222 current_page_item"><a href="#">現在表示しているページ</a></li>
<li class="page_item page-item-3333 page_item_has_children">
<a href="#">親ページ</a>
<ul class='children'>
<li class="page_item page-item-4444 page_item_has_children">
<a href="#">子ページ</a>
<ul class='children'>
<li class="page_item page-item-5555"><a href="#">孫ページ</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>

表示された固定ページ一覧に、現在表示されているページが含まれるときは、カレントクラス current_page_item が付与されます。

リストの見出しを非表示または変更する方法

wp_list_pages で出力した固定ページ一覧には、見出し(デフォルトは「ページ」)が表示されます。
見出しの文言を非表示にするときはパラメーター title_li を追加、値を空にします。

<ul>
<?php wp_list_pages('title_li='); ?>
</ul>

見出しは残したいけど、文言を変更する時は、値に差し替えたい文言を追加します。
例えば、見出しを「固定ページ一覧」にするときは、次のコードを追加します。

<ul>
<?php wp_list_pages('title_li=固定ページ一覧'); ?>
</ul>

指定したIDの子ページ一覧を表示する方法

指定したIDの子ページを表示する方法を紹介します。
条件分岐を使い、子ページがないときは表示しないようにします。そのときは echo=0 を追加します。
次のコードは、ページIDが 123 のときに、そのページに紐づく子ページの一覧を表示します。

<?php // 指定したIDの子ページ一覧を表示
$children = wp_list_pages('title_li=&child_of=123&echo=0'); // ページIDを指定
if($children){ // 子ページがあるときに一覧を表示
echo '<ul>';
echo $children;
echo '</ul>';
}
?>

スラッグからIDを取得して子ページ一覧を表示する方法

IDを調べるのが面倒なときは get_page_by_path を使ってスラッグからIDを取得することもできます。
例えば、ページのスラッグが about の子ページの一覧を取得するときは、次のコードを追加します。

<?php // 指定したIDの子ページ一覧を表示
$page_ID = get_page_by_path('about'); // ID取得用の固定ページオブジェクトの取得
$children = wp_list_pages(array( // ページリストの取得
'title_li' => '', // 見出しの非表示
'child_of' => $page_ID->ID, // ページIDを指定
'echo' => '0' // PHP で使うために HTML テキストとして返す
));
if($children){ // 子ページがあるときに一覧を表示
echo '<ul>';
echo $children;
echo '</ul>';
}
?>

子ページの子ページ一覧を取得するときは、次のように親ページのスラッグを併記します。

$page_ID = get_page_by_path('parent/child'); // 子ページのときは親のスラッグを併記する

特定のページを除外する方法

リンクリストから特定のページを除外するときはパラメーター exclude を追加します。
次のコードは、見出しを非表示にして特定のページ(ページID 10,11 のページ)を除外する方法です。

<ul>
<?php wp_list_pages('title_li=&exclude=10,11'); ?>
</ul>

除外するページのIDを確認するときは、管理画面から各ページの詳細ページで表示されるアドレスから確認してください。

投稿タイプを指定する方法

ページリストを固定ページではなく、投稿やカスタム投稿タイプを指定するとき post_type を追加します。
次のコードは、投稿タイプが products のときの表示方法です。

<ul>
<?php wp_list_pages('title_li=&post_type=products'); ?>
</ul>

テンプレートタグ get_posts を使った表示方法

テンプレートタグ get_posts は、パラメーターに基づいて投稿データを作成します。
リンクリストを自由にマークアップしたいときこちらを選択するとよいかもしれません。
次のコードは、固定ページのリンクリストを昇順ですべて表示する方法です。

<?php // 固定ページ一覧を表示する
$page_list = get_posts( 'numberposts=-1&order=ASC&post_type=page' ); // ページ情報の取得
foreach ( $page_list as $page_item ) {
echo '<a href="'. get_page_link($page_item->ID).'">'.get_the_title($page_item->ID).'</a>'; // ページの情報を表示
}
?>

リンクリストの表示件数を変更するときは numberposts=-1-1(すべて表示)から任意の数字に変更してください。
昇順ではなく降順で指定するときは order=ASCDESC に変更してください。
投稿タイプの指定は post_type=pagepage を変更してください。

まとめ

WordPress で固定ページ一覧を表示する方法を紹介しました。