2026年5月21日

2026年5月21日

WordPressのWP_List_Tableで管理画面テーブルを作る

はじめに

WP_List_Tableクラスは、WordPressの管理画面でリストを表示するための拡張可能な基盤クラスです。カスタムデータやカスタム投稿タイプの管理画面を開発者は自由に作成できます。

本記事では、WP_List_Tableクラスを使って新しいテーブルを作成する具体的な手順と注意点について説明します。

症状・背景

  • カスタム投稿タイプを追加したが、その一覧ページや管理画面の表示に不満がある
  • ユーザー情報をカスタマイズしたいが、wp-admin内で直接編集するのが難しい
  • フィルタリング機能が必要だが、デフォルトでは提供されていない
  • カスタムデータの一覧を整理しやすくしたい

手順・設定方法

ステップ1: WP_List_Tableクラスをインポートする

# プラグインファイルまたはテーマのfunctions.phpに次の行を追加します。
use \wp_list_table\WP_List_Table;

ステップ2: 自身のリストテーブルクラスを作成する

# 基本的なリストテーブルクラスを定義します。拡張元はWP_List_Tableです。
class My_Custom_Posts extends WP_List_Table {

    // クラスの初期化処理を行います。
    public function __construct() {
        parent::__construct( [
            'singular' => 'post',     // 単数名
            'plural'   => 'posts',    // 複数形名
            'ajax'     => false,      // アイデントリフィードを有効にするか否か
        ] );
    }

    // 表のヘッダーを作成します。
    function get_columns() {
        $columns = [
            'cb'             => '<input type="checkbox" />', // チェックボックス列を追加する場合は必要です
            'title'          => __( 'タイトル', 'my-plugin-textdomain' ),
            'author'         => __( '著者名', 'my-plugin-textdomain' ),
        ];
        return $columns;
    }

    // 表のカラムデータを取得します。
    function column_default( $item, $column_name ) {
        switch ( $column_name ) {
            case 'title':
                return $item->post_title;

            case 'author':
                return get_the_author_meta( 'display_name', $item->post_author );
            default:
                return print_r( $item, true ); // デバッグ用
        }
    }

}

ステップ3: テーブルを表示する

// アクションフックを使用してテーブルを表示します。
add_action('admin_menu', 'my_custom_posts_page');
function my_custom_posts_page(){
  $page_title = 'カスタム投稿一覧';
  $menu_title = 'カスタム投稿';
  $capability = 'manage_options'; // ユーザーがアクセスできる権限
  $menu_slug = 'custom_post_list';
  $function = 'my_custom_posts_table';

  add_menu_page( $page_title, $menu_title, $capability, $menu_slug, $function );
}

// 上で指定したフック関数(my_custom_posts_table)を定義します。
function my_custom_posts_table(){
  $screen   = get_current_screen();
  $screen->set_base('edit');
  $screen->add_extension( 'display', '\WP_List_Table_Display' );

  // テーブルオブジェクトのインスタンスを作成
  $table    = new My_Custom_Posts();

  // 検索結果を取得し、テーブルに表示します。
  $posts = get_posts(array(
      'numberposts' => -1,
      'post_type'   => 'your_custom_post',
      'orderby'     => 'date',
      'order'       => 'DESC'
  ));
  $table->prepare_items( $posts );
  $table->display();
}

ステップ4: カスタムカラムの追加

// column_default()の代わりに、個々のカラムをカスタマイズします。
function column_custom_column_name($item) {
    return $item->custom_field_value;
}

add_filter('manage_my_custom_posts_columns', 'my_custom_columns');
function my_custom_columns($columns){
  // カスタムカラムを追加
  $columns['my_custom_column'] = __('Custom Column Title', 'textdomain');

  return $columns;
}

注意事項

  • WP_List_Tableクラスを使う前に、WordPressのドキュメントや公式サイトを確認すること。
  • テーブルデータが大量になる場合、ページング機能や検索機能も実装するべき。
  • カスタムテーブルにセキュリティリスクがないか念入りにチェックすること。
  • 高性能なウェブアプリケーションを作るためには、適切なキャッシュ戦略を採用することが重要。

まとめ

1. WP_List_Tableの導入: デフォルトのWordPress管理画面テーブル機能を超えるカスタマイズのために必要。

2. データ表示と操作: カスタムデータの一覧、編集、削除などの基本的な操作を可能にする。

3. 拡張性: WP_List_Tableクラスは他のプラグインやテーマと連携しやすい柔軟な設計を提供。

4. ユーザー体験向上: 管理者向けのインターフェースを改善することで、ウェブサイトの運営効率が上がります。

5. セキュリティ確保: カスタムテーブルを作成する際は適切な権限管理やデータ検証を行うこと。

関連記事:

お気軽にご相談ください

お見積りへ お問い合わせへ