かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

WordPress 管理画面 固定ページ一覧にスラッグとテンプレート名を表示させたい

WordPressでWEBサイトを作る際に特定のページを作成するために固定ページのテンプレートを作成したりする事があります。
ただテンプレートの選択やページのURLの指定はWordPressの管理画面から行うので、テスト環境と本番環境があるような場合、本番環境でテンプレートが選択できてなかったとか、URL(スラッグ)がテスト環境と同じに設定できてなかったという事故が起こりかねません。
これらが固定ページ一覧のリスト上に表示できれば、ミスがあっても早期発見して修正できるように思います。

固定ページ一覧に表示する要素を変更する

管理画面の一覧ページに表示するカラムのカスタマイズは、manage_{$post_type}_posts_columns フィルターを使います。

(WordPress3.1以前では `manage_edit-{$post_type}_columns フィルター)

今回は固定ページなのでフィルターは manage_page_posts_columns となります。

<?php // function.php

// 固定ページ一覧に表示するカラムの変更
add_filter('manage_page_posts_columns', 'my_manage_page_columns');
function my_manage_page_columns( $columns ) {
  // 表示する順序を変えたいので一度 unset でデフォルトのカラムを外す
  unset($columns['date']);
  unset($columns['author']);
  unset($columns['comments']);
  // slug と template を表示する カラムを追加
  $columns['slug'] = __('Slug');
  $columns['template'] = __('Template');
  // unset したカラムで必要なものを戻す
  $columns['author'] = __('Author');
  $columns['date'] = __('Date');
  return $columns;
}

これで管理画面の固定ページ一覧に スラッグ と テンプレート のカラムがたされた状態になります。
見出しを変更したい場合は、__('Slug') の部分を "URL" などの表示したい文字に変えればOK。

管理画面 固定ページ 一覧の表示のカスタマイズ

カラムに表示するもののカスタマイズは manage_{$post_type}_posts_custom_column フィルターを使います。
カスタム投稿タイプなら manage_posts_custom_column とすれば投稿とカスタム投稿タイプを一括で設定できるのですが、固定ページはこのフィルターでは動作しません。
固定ページは manage_pages_custom_column というフィルターになります。

function.php に固定ページ一覧の表示をカスタマイズするコードを追加します。

<?php // function.php

// 固定ページ一覧の表示をカスタマイズ
add_action('manage_pages_custom_column', 'my_pages_custom_column', 10, 2);
function my_pages_custom_column( $column_name, $post_id ) {
  // Slug
  if( $column_name === 'slug' ) {
    $column = get_post_field('post_name', $post_id, 'display');
  }
  
  // Template Name
  if( $column_name === 'template' ) {
    $column = get_page_template_slug($post_id);
    // または
    // $column = get_post_meta( $post_id, '_wp_page_template', true );
  }

  if( isset($column) && ( $column || $column === 0 ) ) {
    echo $column;
  } else {
    echo __('None');
  }
}

👇

□タイトル スラッグ テンプレート 作成者 日時
□ HOME - フロントページ home page-home.php KiKiKi 公開済み
2017年7月1日
□ About about page-about.php KiKiKi 公開済み
2017年7月1日
□ サンプルページ sample-page なし KiKiKi 公開済み
2017年6月30日
□ Blog - 投稿ページ blog なし KiKiKi 公開済み
2017年6月30日

こんな感じに管理画面の固定ページ一覧にページのURL(Slug)と使用しているテンプレートファイル名を表示する事ができました。

固定ページのテンプレートの取得に関して

固定ページのテンプレート名は get_page_template_slug( $post_id ) で取得することができます。
ただし、特にテンプレートを設定していないデフォルトの場合 get_page_template_slug()NULLを返します。

get_post_meta( $post_id, '_wp_page_template', true ); でもテンプレート名を取得することができ、こちらの場合、テンプレートが設定されていない場合は default という文字列が返ります。

上の例では、最後に$columnが空なら__('None')を返し「なし」と表示するようにしていますが、defaultと表示させたい場合は get_post_meta( $post_id, '_wp_page_template', true ); を使うのが良いと思います。

Function Reference/get page template slug

The function get_page_template_slug() returns an empty string when the value of ‘_wp_page_template’ is either empty or 'default'.

Custom fields starting with an underscore do not display in the Edit screen’s Custom Fields module. To retrieve a Page’s custom template metadata, you can also use:

get_post_meta( $post->ID, ‘_wp_page_template’, true )
出典: Function Reference/get page template slug « WordPress Codex


[参考]