CommentOut

WordPressのユーザー一覧画面に項目(カラム)を追加する WordPressのユーザー一覧画面に項目(カラム)を追加する

WordPressのユーザー一覧画面に項目(カラム)を追加する

公開日:  最終更新日:

WordPressのユーザー一覧って情報量少ないですよね。
特に、メンバー管理系のプラグインを入れた時などに、不自由することがあります。
連番で割り当てられるユーザーIDが一覧画面で見れないのは面倒です。
さらに、メンバーごとの記事の投稿数を確認したりできると便利ですよね。
ユーザー一覧に項目(カラム)を追加する方法を紹介します。

WordPressのユーザー一覧に項目(カラム)を追加する手順

ユーザー一覧画面に項目(カラム)を追加する手順は大きく分けて2つです。
1.actionフック”manage_users_columns”で項目(カラム)自体を追加する
2.actionフック”manage_users_custom_column”で項目(カラム)の中の値を出力する

今回はユーザー一覧にユーザーIDの項目を追加してみましょう。

手順1.actionフック”manage_users_columns”で項目(カラム)自体を追加する

// アクションフック:カラムを追加
add_action('manage_users_columns', 'addColumns');

// カラムを追加
function addColumns($column_headers) {
    // 追加カラムを入れる
    $column_headers['user_id'] = 'ユーザーID';

    return $column_headers;
}

以上です。
部分ごとに解説すると

// アクションフック:カラムを追加
add_action('manage_users_columns', 'addColumns');

manage_users_columnsのアクションフックにカラム追加メソッド『addColumns』を登録します。
次に『addColumns』メソッドを実装します。

// カラムを追加
function addColumns($column_headers) {
    // 追加カラムを入れる
    $column_headers['user_id'] = 'ユーザーID';

    return $column_headers;
}

※addColumnsメソッドの所は他のメソッドと名前が被らないようにしてください。既存メソッドと名前が被るとWordpressがエラーを吐きます。解決方法は下の方で解説します。


引数の$column_headersに追加する項目を代入します。
形式は$column_headers[‘{カラムID:文字列}’] = ‘{表示項目名:文字列}’;です。
例えば、投稿数を表示するなら、$column_headers[‘post_num’] = ‘投稿数’;って感じで、カラムIDも表示項目名も自由に名前を付けることが出来ます。

手順2.actionフック”manage_users_custom_column”で項目(カラム)の中の値を出力する

// カラムの中身を追加
add_action('manage_users_custom_column', 'getColumnValues', 10, 3);

// カラムの中身を追加
function getColumnValues($custom_column, $column_name, $user_id) {
    // カラムが追加したカラムIDでない場合は処理を中断
    if ($column_name !== 'userID') return;

    return $user_id;
}

項目の中身を表示するのもさほど難しくはないです。

// カラムの中身を追加
add_action('manage_users_custom_column', 'getColumnValues', 10, 3);

こちらもアクションフックmanage_users_custom_columnにメソッド名を登録します。
今回は値を表示するメソッドに引数が3つあるので、add_actionの第3引数に10(デフォルト値)、第4引数に3を入れておきます。

// カラムの中身を追加
function getColumnValues($custom_column, $column_name, $user_id) {
    // カラムが追加したカラムIDでない場合は処理を中断
    if ($column_name !== 'userID') return;

    return $user_id;
}

項目の中身を表示する関数では、ユーザー一覧で項目の値問い合わせが行われた時にmanage_users_custom_columnアクションフックが動作するので、この関数が呼び出されます。
内容は単純で、表示したい値をreturnで返すだけです。
大事なのは、問い合わせてきた項目が今回追加した項目なのか、元々ある項目なのかを判別しなければいけない点です。
そこはif ($column_name !== ‘userID’) return;で判別しています。
複数カラム追加したならswitchで分けてもいいでしょうね。

メソッド名が既存メソッドと被るのを防ぐ方法

はい、答えは簡単です。クラス化しましょう。
クラス化することにより、単純なaddColumnsメソッドではなく、あるクラスの中のaddColumnsメソッドを呼び出すことになるので、メソッド名被りは発生しにくくなります。
以下クラス化した全コードです。

class AddUserColumns {
    static $inst = NULL;
    
    // コンストラクター
    private function __construct() {
        // カラムを追加
        add_action('manage_users_columns', array($this, 'addColumns'));
        // カラムの中身を追加
        add_action('manage_users_custom_column', array($this, 'getColumnValues'), 10, 3);
    }

    // インスタンスの呼び出し
    public static function getInst() {
         if (self::$inst === NULL) {
              self::$inst = new self();
         }
         return self::$inst;
    }

    // カラムを追加
    function addColumns($column_headers) {
        // 追加カラムを入れる
        $column_headers['userID'] = 'ユーザーID';

        return $column_headers;
    }

    // カラムの中身を追加
    function getColumnValues($custom_column, $column_name, $user_id) {
        // カラムが追加したカラムIDでない場合は処理を中断
        if ($column_name !== 'userID') return;

        return $user_id;
    }
}

// クラスをインスタンス化
$AddUserColumns = AddUserColumns::getInst();
宣伝
WordPressサイトのテンプレート編集やトラブル対応、バグ修正、簡単なJavascriptの作成(カルーセルやバリデーション等)など、小規模なスポット対応を受け付けております。
もしお困りごとがありましたら、お問い合わせフォームよりご相談ください。

この記事を書いた人

uilou

uilou

プログラマー

基本的に、自分自身の備忘録のつもりでブログを書いています。 自分と同じ所で詰まった人の助けになれば良いかなと思います。 システムのリファクタリングを得意としており、バックエンド、フロントエンド、アプリケーション、SQLなど幅広い知識と経験があります。 広いだけでなく、知識をもっと深堀りしていきたいですね。