【WordPress】標準の投稿アーカイブのパーマリンクを任意のURLにする方法

【WordPress】標準の投稿アーカイブのパーマリンクを任意のURLにする方法 WordPress

WordPress では通常、標準の投稿タイプ(post)のアーカイブページは https://example.com/blog/ や https://example.com/news/ のように、管理画面「設定 > パーマリンク設定」で指定した「投稿用カテゴリーベース」やテーマの仕様に依存します。しかし、標準投稿のアーカイブ URL を任意のスラッグに変更したいケースもあります。本記事ではその方法を解説します。

スポンサーリンク

register_post_type_argsフィルターでは「移動」ではなく「重複」になる

次のようにregister_post_type_argsフィルターで標準投稿タイプのrewrite・has_archiveを書き換える方法が紹介されることがありますが、これは推奨できません。

動作しない例:register_post_type_argsでの書き換え
<?php
function change_post_archive_slug( $args, $post_type ) {
    if ( 'post' === $post_type ) {
        $args['rewrite'] = array( 'slug' => 'topics' ); // 任意のスラッグ
        $args['has_archive'] = 'topics'; // アーカイブURLを /topics/ に
    }
    return $args;
}
add_filter( 'register_post_type_args', 'change_post_archive_slug', 10, 2 );
?>
ブログURLが移動せず、重複したURLが増えるだけになる
このコードを追加すると、確かに/topics/という新しいURLで投稿一覧が表示されるようにはなります。しかし、サイトの実際のブログトップ(ホームページ、または「設定>表示設定」で指定した「投稿ページ」)は、has_archiveやadd_permastruct()とは完全に別の仕組み(show_on_front・page_for_postsオプションとテンプレート階層)で生成されており、このフィルターの影響を一切受けません。つまり元のブログURLはそのまま動作し続け、それに加えて/topics/という同じ投稿一覧を表示する重複したURLが新たに追加されるだけです。検索エンジンから見て重複コンテンツと判定されるリスクがあるうえ、個別の投稿記事も従来のURLに加えて/topics/記事名/という別のURLパターンでアクセス可能になってしまい、重複はさらに悪化します。

正しい方法:「設定>表示設定」の「投稿ページ」を使う

標準の投稿アーカイブURLを実際に変更するには、コードを書く必要はありません。以下の手順で対応します。

  1. 「固定ページ」で、変更したいスラッグ(例:topics)を持つ空の固定ページを新規作成する(本文は空のままで構いません)
  2. 「設定 > 表示設定」を開き、「ホームページの表示」を「固定ページ」に設定する
  3. 「投稿ページ」のプルダウンで、先ほど作成した固定ページを選択する
  4. 設定を保存する

これにより、投稿一覧(ブログアーカイブ)が、その固定ページのスラッグと同じURL(例:/topics/)で正しく表示されるようになります。この仕組みはpage_for_postsオプションと呼ばれる、WordPressが公式にサポートしている機能です。

変更後の注意点

設定変更後は、念のため管理画面から「設定 > パーマリンク設定」を開いて「変更を保存」を押し、リライトルールを再生成しておくと安心です。

特定の用途での活用例

  • 「ブログ」の代わりに「news」「topics」「column」などに変更したい場合
  • 既存のサイト構造やSEOに合わせて投稿アーカイブのURLを調整したい場合

よくある質問(FAQ)

Q標準投稿のアーカイブページ(ブログトップ)のURLを変更するには?
A「設定>表示設定」で、変更したいスラッグを持つ固定ページを作成し、「投稿ページ」としてそのページを指定します(page_for_postsオプション)。register_post_type_argsフィルターでhas_archiveを書き換える方法は、標準投稿のブログトップには反映されず、別の重複したURLが追加されるだけなので使わないでください。
QカテゴリーアーカイブのURLから/category/を削除するには?
ACategoryPermalinkプラグインを使うか、add_permastruct()でカテゴリーのリライトルールをカスタマイズします。/category/を削除すると一部プラグインとの互換性に問題が生じることがあります。
Q日付アーカイブのURLをカスタマイズするには?
Aadd_rewrite_rule()でカスタムURLパターンを追加し、既存の日付アーカイブURLとマッピングします。または日付アーカイブを無効にしてカスタムURLで同等の機能を実装する方法もあります。

まとめ

標準の投稿アーカイブ URL は、register_post_type_argsフィルターでは正しく変更できません(重複したURLが増えるだけです)。「設定>表示設定」で任意のスラッグを持つ固定ページを「投稿ページ」に指定する、WordPress公式のpage_for_postsの仕組みを使いましょう。設定変更後は必ずパーマリンク設定を再保存してリライトルールを更新してください。これにより、サイトの構造をより柔軟にコントロールできるようになります。