複数のユーザーが記事を投稿するWordPressサイトでは、各ユーザーの投稿状況を管理者がひと目で把握できると便利です。この記事では、WordPressの管理画面のダッシュボードに「ユーザーごとの投稿数」を表示するカスタマイズ方法を紹介します。
ダッシュボードウィジェットを追加する
まずは、functions.php に以下のコードを追加して、ダッシュボードにカスタムウィジェットを作成します。
functions.php:ユーザー投稿数ウィジェット
// ダッシュボードにユーザー投稿数ウィジェットを追加
function add_user_post_count_dashboard_widget() {
wp_add_dashboard_widget(
'user_post_count_widget',
'ユーザーごとの投稿数',
'render_user_post_count_widget'
);
}
add_action('wp_dashboard_setup', 'add_user_post_count_dashboard_widget');
// ウィジェットの中身を出力
function render_user_post_count_widget() {
// 投稿権限を持つユーザーだけに絞り込む
// (購読者・顧客ロール等の無関係なユーザーを除外し、クエリ件数も削減)
$users = get_users([
'orderby' => 'display_name',
'capability' => 'edit_posts',
]);
echo '<table class="widefat">';
echo '<thead><tr><th>ユーザー</th><th>投稿数</th></tr></thead>';
echo '<tbody>';
foreach ($users as $user) {
$count = count_user_posts($user->ID);
echo '<tr>';
echo '<td>' . esc_html($user->display_name) . '</td>';
echo '<td>' . esc_html($count) . '</td>';
echo '</tr>';
}
echo '</tbody></table>';
}
全ユーザーを対象にすると会員制サイトで深刻な負荷になる
get_users()にロールを指定しないと、購読者やWooCommerceの顧客ロールなど、投稿を書くことのないユーザーも含めた全ユーザーが取得されます。さらにcount_user_posts()はユーザーごとに個別のSQLクエリを発行するため、登録ユーザー数が多い会員制サイトやECサイトでは、管理画面のダッシュボードを開くたびに大量のクエリが発生し、深刻なパフォーマンス低下を招きます。get_users()の'capability' => 'edit_posts'(WordPress 5.9で追加)で投稿権限を持つユーザーだけに絞り込むことで、無関係な行が表示されなくなるだけでなく、クエリ対象のユーザー数自体も削減できます。表示される内容
このカスタマイズを有効にすると、WordPressのダッシュボードに「ユーザーごとの投稿数」というウィジェットが追加され、次のような情報が表示されます:
- ユーザー名(display_name)
- そのユーザーが投稿した記事の数
投稿数は、基本的には公開済みの「投稿」タイプの件数です。ただしcount_user_posts()はデフォルトでは、閲覧している管理者自身がread_private_posts権限を持つ場合、非公開(private)ステータスの投稿もカウントに含まれます(下書き・保留中は含まれません)。カスタム投稿タイプの件数も含めたい場合は、count_user_posts() 関数の第2引数に投稿タイプを指定してください。
よくある質問(FAQ)
Qログインユーザーの投稿一覧をダッシュボードウィジェットとして表示するには?
Awp_add_dashboard_widget()でウィジェットを追加し、コールバック内でWP_Query(array(‘author’ => get_current_user_id(), ‘posts_per_page’ => 10))で自分の記事を取得して表示します。
Qステータス別(公開済み・下書き・審査待ち)の件数を表示するには?
Acount_user_posts()にはステータス別に件数を取得する機能はなく、「公開済み+条件付きで非公開も含む」か「公開済みのみ」かの二択しかありません。ステータスごとの内訳が必要な場合は、WP_Query(author + post_status指定)かwpdb->get_resultsでのSQLで集計します。
Qダッシュボードのリンクから直接記事一覧・新規作成ページに移動させるには?
Aadmin_url(‘edit.php?author=’.get_current_user_id())で著者フィルター付きの記事一覧URL、admin_url(‘post-new.php’)で新規作成URLを生成してリンクに設定します。
まとめ
ユーザーごとの投稿状況を簡単に把握できるようになると、編集作業や記事管理がスムーズになります。特に複数ライターが在籍するメディアやブログ運営では、投稿数を定期的にチェックすることが重要です。会員制サイトなど登録ユーザー数が多い場合は、投稿権限を持つユーザーだけに絞り込んでからウィジェットを表示するようにしましょう。

