WordPress 管理画面で固定ページの「階層スラッグ」を表示する方法

WordPress の固定ページは階層構造(親子関係)を持てますが、管理画面の一覧では「完全なスラッグ(URL構造)」が確認できないのが地味に不便です。

例えば以下のような構造の場合:

/about/company/profile

管理画面では「profile」しか表示されず、
どの階層に属しているのか直感的に分かりません。

この記事では、固定ページ一覧に階層付きスラッグ(フルパス)を表示する方法を解説します。


なぜ必要か

このカスタマイズは以下のケースで特に有効です。

  • URL設計を厳密に管理している
  • 多階層のページ構造を扱っている
  • API連携やルーティングでスラッグを使う
  • SEO上のURL構造を確認したい

実装の概要

やることはシンプルです。

  1. 管理画面にカラムを追加
  2. 階層を含めたスラッグを取得
  3. 一覧に表示

完成コード

以下を functions.php または独自プラグインに追加してください。

<?php
/**
 * 固定ページ一覧に「階層スラッグ」カラムを追加
 */

/**
 * カラム追加
 */
function add_page_slug_column($columns) {
    $columns['hierarchical_slug'] = 'スラッグ(階層)';
    return $columns;
}
add_filter('manage_pages_columns', 'add_page_slug_column');


/**
 * カラム内容表示
 */
function render_page_slug_column($column, $post_id) {
    if ($column === 'hierarchical_slug') {
        echo esc_html(get_full_slug($post_id));
    }
}
add_action('manage_pages_custom_column', 'render_page_slug_column', 10, 2);


/**
 * 階層スラッグ取得関数
 */
function get_full_slug($post_id) {
    $post = get_post($post_id);

    if (!$post) return '';

    $slug = $post->post_name;
    $parents = [];

    $parent_id = $post->post_parent;

    while ($parent_id) {
        $parent = get_post($parent_id);
        if (!$parent) break;

        array_unshift($parents, $parent->post_name);
        $parent_id = $parent->post_parent;
    }

    return implode('/', array_merge($parents, [$slug]));
}

表示イメージ

このコードを適用すると、管理画面の固定ページ一覧に以下のようなカラムが追加されます。

スラッグ(階層)
-------------------------
about
about/company
about/company/profile

一目でURL構造が分かるようになります。


処理のポイント解説

1. 親ページをさかのぼる

while ($parent_id) {

このループで、親ページを順番に取得しています。


2. 順序を正しく保つ

array_unshift($parents, $parent->post_name);

array_unshift を使うことで、

親 → 子 → 孫

の順序を維持しています。


3. 最終的に連結

implode('/', array_merge($parents, [$slug]));

これにより

about/company/profile

のような完全なスラッグになります。


応用パターン

URLとして表示したい場合

return home_url('/' . implode('/', array_merge($parents, [$slug])) . '/');

投稿タイプを限定する

固定ページ以外にも対応したい場合:

add_filter('manage_posts_columns', 'add_page_slug_column');

並び替え対応(上級)

カラムをクリックしてソートしたい場合は、
meta_query やカスタムフィールド化が必要になります。


注意点

  • 大量ページ(数千件)ある場合は処理コストに注意
  • キャッシュ(transient)を使うと高速化可能
  • 階層が深いほどループ回数が増える

まとめ

WordPressの標準管理画面では確認しづらい「階層スラッグ」ですが、
少しのカスタマイズで視認性は大きく改善できます。

特に以下のような方にはおすすめです。

  • URL設計を重視している
  • 大規模サイトを運用している
  • 開発・運用を効率化したい

コメント

タイトルとURLをコピーしました