ページスラッグで除外可能な固定ページリストを制作します。通常は除外するためにページIDが必要ですが、ページスラッグで除外するほうが便利だったりします。
順を追って解説していきますが、お急ぎの方はまとめまでスクロールでどうぞ。
元になる固定ページのリスト
wp_list_pages()
wp_list_pages()で固定ページのリストを作成する場合の基本型です。2行目でtitle_liを空にすることでデフォルトのタイトルを表示しないようにしています。ulは出力に含まれないので書き足す必要があります。
<ul> <?php wp_list_pages( 'title_li=' ); ?> </ul>
ここから目当ての処理を付け足していきます。
ページスラッグを指定してページIDを取得
固定ページを除外するためにはID(数字)で指定する必要がありますが、ページスラッグで指定できたほうが便利と考え、除外したいページスラッグを元にページIDを取得します。
下記のような流れでページスラッグの配列をページIDの配列に変換します。
<?php
$slugs = array( 'page_a', 'page_b' ); // 除外ページをスラッグで指定.
$ids = array(); // ページIDを入れる配列.
foreach ( $slugs as $page_slug ) {
$page = get_page_by_path( $page_slug );
array_push( $ids, $page->ID );
}
$exclude_ids = implode( ',', $ids ); // パラメータで使うため結合.
?>
2行目:除外したい固定ページのスラッグを配列にします。
4行目:ページIDを入れる配列を宣言しておきます。
5行目:除外したいページの回数ほどループさせます。
6行目:get_page_by_path()で固定ページの情報を取得します。
7行目:4行目で宣言した配列にページIDを代入します。
9行目:implode()でカンマ区切りの文字列として結合し、除外したいページIDの配列$exclude_idsができました。
まとめ:ページスラッグで除外可能な固定ページのリスト
あとはwp_list_pages()のパラメータとして先ほどの配列を使えば完成です。
解説用のコメントは削除し、テンプレートファイルにコピペすると使える状態になっています。
除外ページのスラッグの箇所のみサイトに合わせて修正してください。
functions.php
<?php
$slugs = array( 'page_a', 'page_b' ); // 除外ページをスラッグで指定.
?>
<ul class="sm-list">
<?php
$ids = array();
foreach ( $slugs as $page_slug ) {
$page = get_page_by_path( $page_slug );
array_push( $ids, $page->ID );
}
$exclude_ids = implode( ',', $ids );
wp_list_pages(
array(
'title_li' => '', // タイトルなし.
'exclude' => $exclude_ids, // 除外ページIDの配列を指定.
)
);
?>
</ul>
参考リンク
WordPress Codex – wp_list_pages()
WordPress Codex – get_page_by_path()

