PLUGIN : Rapls Sitemap
Rapls Sitemap wordpress.org から最新版をダウンロード
WordPress.org 公式リポジトリで公開している、読者向けの HTML サイトマッププラグインの技術リファレンスページです。固定ページを親子階層のまま、投稿をカテゴリー別に整理して、サイト全体の目次を 1 ページに組み上げます。設置はショートコード [rapls_sitemap] かブロックを 1 か所置くだけで、あとはサイトの成長に合わせて自動で更新されます。
検索エンジン向けの XML サイトマップではありません。XML は WordPress 本体が wp-sitemap.xml として出力するので、本プラグインはそこには手を出しません。作るのは、訪問者が「どこに何があるか」を探すための人間向けのページです。
PS Auto Sitemap(2022 年に配布終了)と WP Sitemap Page の、メンテナンスが続く代替として一から書いています。どちらのコード・CSS・画像も使わず、公開されているインターフェースだけを再現しているため、サイトマップページの本文を書き換えずに乗り換えられます。
開発の経緯や実装の詳細については、開発者ガイドをご参照ください。
OVERVIEW : 何を作るプラグインか
HTML サイトマップは、サイトの目次です。ページ数が増えるほどグローバルナビゲーションには入りきらなくなり、「あのページはどこだったか」を探す手段が検索窓しか残らなくなります。1 ページに全体像を出しておくと、訪問者は構造を見たまま辿れます。官公庁・自治体・学校・医療機関のサイトで昔から置かれてきたのは、この理由からです。
ただし、手作業で作った目次は必ず古くなります。ページを 1 枚足すたびに目次も直す運用は続きません。本プラグインはページを置いた時点の構造ではなく、今の構造を出力します。固定ページの親子関係、投稿とカテゴリーの結び付き、投稿者、年月アーカイブ、ナビゲーションメニュー——いずれも WordPress が持っているデータから毎回組み立てるので、更新は不要です。
設計上の判断がひとつあります。一覧が途中で打ち切られたときは、必ず出力にその旨を書きます。件数上限に達した、除外設定で消えた——理由が何であれ、黙って減らすことはしません。目次として使うページで「全部ある」と誤解させるのは、目次がないことより悪いためです。
サイトマップに欠かせない 9 項目だけ
初期値以外が入っているパネルは自動で開く
親子階層をそのまま
カテゴリー見出しの下にまとめて
画面の一覧は WordPress.org のスクリーンショットをご覧ください。
INSTALLATION : 設置方法
動作要件
- WordPress 6.3 以上(最新版を推奨)
- PHP 7.4 以上
- 外部依存なし — Composer も、JavaScript のビルドツールも必要ありません
- ブロックを使う場合は WordPress 6.3 以上(
block.jsonAPI v3 のため)。ショートコードだけなら関係ありません
セットアップ手順
- プラグインをインストール・有効化
- 設定 → Rapls Sitemap の「基本設定」タブで、何を並べるかを選ぶ
- サイトマップを置きたい固定ページに
[rapls_sitemap]を貼るか、「サイトマップ」ブロックを追加 - ページを表示して確認。デザインが合わなければ「基本設定」のデザインを切り替える
2 以降はすべて任意です。有効化してショートコードを置いた時点で、固定ページと投稿を並べたサイトマップが出ます。設定項目にはすべて既定値が入っています。
クイックスタート
- ショートコード —
[rapls_sitemap]をページ本文に - ブロック — ブロック追加から「サイトマップ」。属性はサイドバーの 4 パネル(内容・除外・並び順・外観)から
- 設定画面 — 設定 → Rapls Sitemap。基本設定タブが既定値、詳細設定タブに残りすべて
- 移行 — 詳細設定 → 他のプラグインからの移行。移行元に合うものをオンに
FEATURES : 機能一覧
1. 一覧にできるもの
- 固定ページ — 親子階層のまま、任意の深さで
- 投稿 — カテゴリー別に整理(子カテゴリーも入れ子に)
- カテゴリー・タグ・カスタムタクソノミー — 記事付き、またはターム一覧のみ
- 投稿者 — ユーザー ID とロールで絞り込み
- 年月アーカイブ — 年・月単位
- ナビゲーションメニュー — 運用者が組んだ順序とラベルのまま。複数のメニューを 1 ページに並べることもできます
- カスタム投稿タイプ・カスタムタクソノミー — 標準のものと併用も、置き換えも可
投稿者一覧と年月アーカイブ一覧は、投稿から作ります。このサイトマップが何を並べていても同じです。投稿者アーカイブも日付アーカイブも表示するのは投稿なので、固定ページから作った年は中身のないページへのリンクになるためです。
公開されている投稿タイプ・タクソノミーだけを並べます。非公開で登録された投稿タイプは、ショートコード属性で名指しされても一覧に出ません。フロントエンドに出さないと決められたコンテンツだからです。
2. 1 か所の設置で 1 ページ分
固定ページ・投稿・カテゴリー・投稿者・年月アーカイブを、それぞれの見出しを付けて順に並べられます。サイトマップページによくある形です。
[rapls_sitemap sections="page,post,category,author,archive"]
各セクションは順序を指定でき、メニューは menu:<ID またはスラッグ> の形で個別に指定できます。設定画面ではチェックボックスと数字で同じことができます。
3. サイトの一部だけを並べる
大きなサイトでは、全体ではなくセクション単位の目次が欲しくなります。
child_of="123"— 固定ページ 123 の下だけを並べるchild_of="current"— 今表示しているページの下だけ。ID を書かないので、ステージングと本番で ID が違っても同じテンプレートが使えますchild_of="parent"— 1 つ上のページの下。同じテンプレートをセクション内の全ページに置くと、読者は自分がその中のどこにいるかを見ながら移動できます
親ページが noindex やパスワード保護で一覧から外れていても、その下のページは消えません。1 ページを隠す理由は、その子を失う理由ではないからです。
4. 絞り込み
- 階層の深さ制限(0 で無制限)
- 記事 ID・カテゴリー ID・ユーザー ID による除外。親を除外すれば子も一緒に外れます
- 投稿タイプ・タクソノミー単位の除外
- サイトマップを置いたページ自身を、その一覧から外す
- パスワード保護された項目の除外
- 個別に noindex を指定された項目の除外
- 公開日による期間指定(年度別サイトマップ)。年月アーカイブ一覧とカテゴリー一覧も一緒に絞り込まれます
- 件数上限:1 リストあたり、カテゴリーごと、開始位置
パスワード保護された記事は、一覧に残っている場合でも抜粋を出しません。出力はキャッシュされ、パスワードを入力していない読者にも配信されるためです。
5. SEO プラグインの noindex を読み取る
「検索エンジンに出さない」と決めたページを目次に載せるのは矛盾なので、主要な SEO プラグインの設定を直接読みます。
- Yoast SEO / Rank Math / SEO SIMPLE PACK / SEOPress / The SEO Framework / All in One SEO / Cocoon テーマ
- カテゴリー・タグも読み取ります(ターム自体を一覧にしている場合)
- 投稿者も読み取ります(利用者ごとの設定)
- 上記以外は
rapls_sitemap/is_noindexほかのフィルターで追加できます
読み取るのは個別に指定された noindex だけです。「この投稿タイプ全体を noindex に」「日付アーカイブを noindex に」といった既定値は参照しません。それらの一覧は設定画面でチェックしたときだけ出るものであり、SEO プラグイン側の既定値(Yoast は初期状態で日付アーカイブを noindex にします)で、利用者が出すと決めた一覧が空になるのを避けるためです。
6. 並び順
- 記事 — 新しい順・古い順・タイトル順・ID 順・ページの並び順・更新日順・コメント数順・ランダム・カスタムフィールド順
- カテゴリー見出し — 名前・記事数・スラッグ・ID・手動の並び順(並べ替えプラグインと併用)
カスタムフィールド順は、日本語サイトでは実質的に「読み仮名順」です。タイトルはデータベースの照合順序で並ぶため、かなとラテン文字は正しく並びますが、漢字は並びません。「大阪」が「おおさか」と読むことはどこにも記録されていないからです。読みをカスタムフィールドに入れてそれを指定すると、本当の五十音順になります。設定画面に、フィールドの作り方まで含めた解説を入れてあります。
7. デザイン
- プリセット 27 種+「スタイルなし」 — 画像・スプライト・アイコンフォントを一切使わない CSS のみの実装。装飾は
currentColorの枠線と擬似要素なので、テーマの色を継承し、ダークテーマでもそのまま使えます - 「基本設定」タブの文字の大きさスライダー(5 段階) — どのサイトも必ず一度は触る設定なので、これだけは詳細設定を開かずに変えられます
- フォントサイズ・行間・字下げ・リンク色・下線・段組みを、どのプリセットの上にも重ねられます。フォントサイズは長さの直接指定なので、スライダーより優先されます
- 箇条書きの記号 — 黒丸 / 白丸 / 四角 / 絵文字 / アイコンクラス(Font Awesome 等)。最上位と下の階層で別々に指定
- 見出しを
h2〜h6の本当の見出し要素として出力。スクリーンリーダーの利用者はこれを辿ってページを移動します - 下に項目を持つ項目を、リンクではなく見出しとして表示する設定
- 設定画面のクラス一覧。カスタマイザーの「追加 CSS」やテーマから指定するときの参照用
指定していないデザイン項目は、CSS の宣言そのものを出しません。CSS には「そのままにする」という値がないため、空欄に既定値を当てるとテーマの指定を上書きしてしまいます。存在しない宣言は上書きできません。
8. 大規模サイト向けの設計
- 投稿タイプごとに 1 クエリ。カテゴリー別に整理してもクエリは増えません(タームごとに問い合わせるのではなく、取得済みの投稿から所属を組み立てます)
- 件数上限(既定 2000)は投稿・ターム・投稿者の 3 クエリすべてに効きます。サイトマップは全投稿タイプの全件を一度に要求するので、メモリを使い切るのはこのクエリです
- レンダリングキャッシュ(既定 12 時間)。コンテンツ更新時に自動で破棄され、パーマリンク構造・カテゴリーベース・日付書式の変更でも破棄されます
- キャッシュの破棄はソルトの更新で行い、
wp_optionsのLIKE検索は一切行いません - WPML・Polylang 対応(設定不要)。キャッシュも言語ごとに分かれます
9. 他プラグインからの移行
互換機能は 2 つあり、どちらも初期状態ではオフです。他プラグインの記法に勝手に反応しないための初期値です。
- WP Sitemap Page —
[wp_sitemap_page]ショートコードに応答します(only="..."属性を含む)。WP Sitemap Page 自体が有効なあいだは何もしません - PS Auto Sitemap — 本文に残った
<!-- SITEMAP CONTENT REPLACE POINT -->に応答します - 設定はボタン 1 つで読み込めます。PS Auto Sitemap の設定はプラグインを削除しても残るため、以前使っていたサイトなら設定画面に「PS Auto Sitemap から読み込む」が現れます。表示するリストとその順序、階層の深さ、除外カテゴリー・除外記事、キャッシュの有無、そして近いデザインが入ります。旧設定は読むだけで書き換えないので、何度でもやり直せます
読み込みで完全には移せないものが 2 つあります。デザインは近いプリセットに合わせるだけで、同じスタイルシートを再現するわけではありません(どちらも本プラグインの独自 CSS です)。PS Auto Sitemap の「分割」モードは、カテゴリー一覧の横に「このカテゴリーの記事を見る」リンクが並ぶものでしたが、本プラグインではカテゴリーのみの一覧になります。カテゴリー単位のドリルダウンに相当する機能はありません。
10. フロントエンドに何も出しません
- 開発者へのリンクを一切出力しません。オプトインの設定すらありません
- 管理画面の通知も、ダッシュボードウィジェットも、「7 日後にレビューを依頼」のタイマーもありません
- 支援リンクは 3 か所のみ(readme の Donate link、このプラグインの設定画面の末尾、プラグイン一覧のこのプラグインの行)
SETTINGS : プラグイン設定画面
WordPress の管理画面「設定 → Rapls Sitemap」から設定します。画面は 2 つのタブに分かれています。
基本設定タブ
サイトマップを作るのに欠かせない 9 項目だけです。すべてに既定値が入っているので、何を並べるかを選べばそれで完成します。
- 表示する対象(投稿と固定ページ / 投稿者 / 年月アーカイブ / メニュー)
- 表示する内容(投稿タイプの選択と並び順)
- 最大階層
- ホームページへのリンク
- 除外する記事 ID
- 除外するカテゴリー ID
- デザイン(28 種)
- 文字の大きさ(5 段階のスライダー)
- キャッシュの保持時間
詳細設定タブ
任意の設定すべてを 8 つの折りたたみパネルに収めています。初期値以外が入っているパネルは自動で開くので、自分で設定した項目が閉じたパネルの中に隠れることはありません。
- 構成 — 1 か所に複数の一覧を並べる、サイトの一部だけに絞る
- 除外する項目 — 公開期間、投稿者、パスワード保護と noindex の項目
- カテゴリーでまとめる — カテゴリー見出し、入れ子、カテゴリーだけの一覧
- 各項目の表示 — 日付、抜粋、件数、見出し、nofollow
- 並び順 — 項目とカテゴリーの並べ方、件数上限、カスタムフィールド
- 文字と記号 — フォントサイズ、行間、リンクの色、下線、箇条書きの記号
- 指定できるクラス一覧 — テーマから指定するためのクラス名
- 他のプラグインからの移行 — WP Sitemap Page や PS Auto Sitemap にも応答する
SHORTCODE : ショートコードの属性
設定画面の値が既定で、ショートコードの属性はその配置だけを上書きします。書かなかった属性は設定画面の値のままです。
何を並べるか
[rapls_sitemap post_types="page,post"] [rapls_sitemap source="authors"] [rapls_sitemap menu="global-nav"] [rapls_sitemap sections="page,post,category,menu:12"]
menu は ID・スラッグ・名前のどれでも受け付けます。メニューを名指しした時点でそれを並べる意味になるので、source="menu" を併記する必要はありません。
範囲を絞る
[rapls_sitemap child_of="current" depth="2"] [rapls_sitemap number="100" offset="10" per_category="5"]
number はサイト側の件数上限を狭めることしかできません。あの上限はメモリを使い切るクエリへの安全装置であって好みの設定ではなく、ショートコードは記事を編集できる人なら誰でも書けるためです。
各項目に何を出すか
[rapls_sitemap show_date="1" date_format="Y年n月j日"] [rapls_sitemap show_excerpt="1" excerpt_length="40"] [rapls_sitemap show_count="1" nofollow="1"]
まとめ方と並び順
[rapls_sitemap group_by_term="1" nest_terms="1" taxonomy="product_cat"] [rapls_sitemap term_mode="terms_only"] [rapls_sitemap orderby="title" order="ASC"] [rapls_sitemap term_orderby="count" term_order="DESC"]
見た目
[rapls_sitemap design="tree" list_type="ol"]
キャッシュの保持時間・バンドル CSS の読み込み・移行の互換設定は、配置ごとではなくサイト全体の設定です。
ブロックでも同じ属性が使えます。サイドバーの各項目は「指定しない / オン / オフ」の 3 択で、チェックボックスではありません。チェックボックスには「指定しない」という状態がないため、ブロックを置いただけでサイトの設定を打ち消してしまうからです。
FAQ : よくある質問
これは検索エンジン向けの XML サイトマップですか?
違います。これは読者向けの HTML サイトマップです。XML は WordPress 5.5 以降が wp-sitemap.xml として自動で出力するので、本プラグインはそこには手を出しません。両方を置いても競合しません。
サーバー要件は?
WordPress 6.3 以上、PHP 7.4 以上。外部依存はありません。Composer も JavaScript のビルドツールも不要で、プラグイン自身が PSR-4 オートローダーを同梱しています。
PS Auto Sitemap から乗り換えられますか?
はい。サイトマップページの本文を書き換える必要はありません。「他のプラグインからの移行」でコメントマーカーへの応答をオンにすると、<!-- SITEMAP CONTENT REPLACE POINT --> が残っているページはそのまま動きます。設定も「PS Auto Sitemap から読み込む」ボタンで引き継げます(旧設定は読むだけで、書き換えません)。
なお PS Auto Sitemap は 2022 年 10 月にプラグインディレクトリで公開停止となっています。脆弱性が公表されたという事実はなく、WPScan にも該当する CVE は登録されていません。
WP Sitemap Page から乗り換えられますか?
はい。「他のプラグインからの移行」で [wp_sitemap_page] への応答をオンにすると、only="..." 属性を含めてそのまま動きます。WP Sitemap Page 自体が有効なあいだ、本プラグインはそのショートコードに手を出しません。2 つのプラグインが 1 つのショートコードを取り合うのは、どちらか一方の挙動より悪いためです。
大量の投稿があるサイトでも重くなりませんか?
投稿タイプごとに 1 クエリで、カテゴリー別に整理してもクエリは増えません。既定で 1 リストあたり 2000 件の上限があり、上限で打ち切られた一覧は必ず出力にその旨を書きます。出力は既定 12 時間キャッシュされ、コンテンツが更新されると自動で破棄されます。
多言語サイトで使えますか?
WPML と Polylang に対応しています。設定は不要です。どちらも投稿とタームのクエリを現在の言語で絞り込むため、言語ごとに正しいサイトマップが出力されます。本プラグインはクエリフィルターを無効化しません。キャッシュも言語ごとに分かれます。
1 ページに複数のサイトマップを置けますか?
置けます。ショートコードもブロックも、配置ごとに違う内容を出せます。デザイン設定も配置ごとに分かれ、互いに干渉しません(スタイルは設定内容のハッシュでスコープされます)。
自分で書いた CSS はどこに置きますか?
カスタマイザーの「追加 CSS」か、テーマのスタイルシートです。本プラグインに CSS を保存する欄はありません。プラグインが任意の CSS を保存して出力することは WordPress.org のガイドラインが認めておらず、WordPress 自身がエラーチェック付きのエディターをカスタマイザーに用意しているためです。
代わりに設定画面へ残したのは、外からは分かりようのなかった部分 — クラス名の一覧です。「指定できるクラス一覧」パネルに、出力される要素のクラスがすべて並んでいます。.rapls-sitemap を起点に指定すれば、ページの他の部分には影響しません。
テーマの CSS と衝突しませんか?
クラスはすべて .rapls-sitemap 以下に収めた BEM です。バンドルされたスタイルシートは設定で読み込みを止められるので、テーマ側ですべて指定することもできます。プリセットは画像を使わず currentColor で組んであるため、テーマの文字色をそのまま引き継ぎます。
アンインストール時のデータは?
プラグインが作成したオプションをすべて削除します。マルチサイトでは全サイト分を掃除します。投稿・タームなどサイトのコンテンツには一切触れません。
有料版はありますか?
ありません。上限も、試用期間も、ライセンスキーもありません。ここに書いてある機能はすべて無料版のものです。
ADVANCED FILTERS : フィルターフック
設定画面で足りない場合は、functions.php か小さなプラグインに数行書いて挙動を変えられます。
WooCommerce — カタログ非表示・在庫切れの商品を除外する
WooCommerce はどちらも非公開タクソノミー product_visibility のタームとして記録しているので、1 つの条件で書けます。
add_filter( 'rapls_sitemap/query_args', function ( $args, $post_type ) {
if ( 'product' !== $post_type ) {
return $args;
}
$args['tax_query'][] = array(
'taxonomy' => 'product_visibility',
'field' => 'slug',
'terms' => array( 'exclude-from-catalog', 'outofstock' ),
'operator' => 'NOT IN',
);
return $args;
}, 10, 2 ); tax_query は代入ではなく追加してください。除外カテゴリーの指定を本プラグインがそこに入れているため、配列ごと置き換えると消えます。
カスタムフィールドで掲載対象を選ぶ
「全部載せる」ではなく「載せると決めたページだけ載せる」サイトマップにする場合です。
add_filter( 'rapls_sitemap/query_args', function ( $args, $post_type ) {
if ( 'page' !== $post_type ) {
return $args;
}
$args['meta_query'][] = array(
'key' => 'show_in_sitemap',
'value' => 'yes',
);
return $args;
}, 10, 2 ); 対応していない SEO プラグインの noindex を読む
add_filter( 'rapls_sitemap/is_noindex', function ( $noindex, $post_id ) {
return $noindex || 'yes' === get_post_meta( $post_id, '_your_seo_noindex', true );
}, 10, 2 ); カテゴリーやタグには rapls_sitemap/is_term_noindex、投稿者には rapls_sitemap/is_user_noindex があります。
出力が閲覧者によって変わる場合
ログイン状態などに依存するフィルターを書く場合は注意してください。キャッシュキーはそれを見られないので、最初に訪れた人向けの HTML が全員に配信されます。依存している値をキーに渡すか、キャッシュの保持時間を 0 にしてください。
add_filter( 'rapls_sitemap/cache_variant', function ( $variant, $settings ) {
$variant[] = is_user_logged_in() ? 'in' : 'out';
return $variant;
}, 10, 2 ); そのほかの拡張ポイント
rapls_sitemap/settings— 設定一式(使われる直前)rapls_sitemap/tree— 組み上がったノード配列、設定rapls_sitemap/output— 完成した HTML、ノード配列、設定rapls_sitemap/post_types/rapls_sitemap/taxonomies— 設定画面に出す候補rapls_sitemap/designs— デザインプリセットの一覧rapls_sitemap/archive_post_types— 投稿者・年月アーカイブを組み立てる元の投稿タイプrapls_sitemap/cache_ttl— キャッシュの保持秒数、設定rapls_sitemap/max_nodes— 1 ページに出力するノード数の上限rapls_sitemap/legacy_shortcode—[wp_sitemap_page]に応答するかどうか
ACTION HOOKS : アクションフック
キャッシュが破棄されたときに何かする
add_action( 'rapls_sitemap/cache_flushed', function () {
// 例: 前段のページキャッシュも一緒に落とす
if ( function_exists( 'my_purge_page_cache' ) ) {
my_purge_page_cache( '/sitemap/' );
}
} ); CHANGE LOG : バージョン履歴
- 0.1.2「基本設定」タブに文字の大きさのスライダーを追加。5 段階で、真ん中の「標準」は何も指定しない状態なので、更新しただけで既存サイトの見た目が変わることはありません。「詳細設定」タブのフォントサイズは長さの直接指定のため、そちらが優先されます。
- 0.1.1初回リリース。固定ページ・投稿・カテゴリー・投稿者・年月アーカイブ・ナビゲーションメニューの一覧、1 か所の設置で複数セクションを順に並べる構成、サイトの一部だけに絞る範囲指定、公開期間・noindex・パスワード保護などの絞り込み、27 種のデザインプリセットとその上に重ねる文字・色・箇条書きの設定、ショートコードとブロック、PS Auto Sitemap / WP Sitemap Page からの移行。
RELATED PAGES : 関連ページ
- プラグイン一覧
- Rapls Sitemap 開発者ガイド – 開発の経緯・実装の試行錯誤・トラブルシューティング
- WordPress.org プラグインページ
- WordPress.org サポートフォーラム
- GitHub リポジトリ