目的
- ブログ投稿数をチーム別に表示したい
- 直近3ヶ月分の投稿数を表示したい
- 新しいユーザが作成されたら分かるようにしたい
- 手軽に実装したい
やってみた事
ダッシュボードにチーム別の投稿数が表示されるWordpressプラグインを作成しました。
動作スクリーンショット
直近3ヶ月の各チーム/ユーザの投稿数が分かるようになっております。
(投稿済みの記事数がカウントされます)
新しいユーザは、チーム分け未実施ユーザとして表示されます。
(IDを確認し、プログラム先頭のチーム配列へ追加する必要あり)
初めてのWordPressプラグイン作成でしたが、下記を参考に作成しました。
ありがとうございました。
http://netaone.com/wp/dashboard-notepad/
http://developer.wordpress.org/reference/
ソースコード
下記ソースコードを記載のディレクトリ構成にて配置後、プラグインメニューから有効化して下さい。
wp-content/plugins/dashboard-postinfo/dashboard-postinfo.php
動作確認Wordpressバージョン : 3.9.2
dashboard-postinfo.php
<?php /* Plugin Name: Dashboard PostInfo Plugin URI: http://www.skyarch.net/ Description: Summary Statistics for TeamBlogging Author: Takashi Version: 1.00 Author URI: http://kouzu.info/ Text Domain: dashboard-postinfo */ /* Dashboard Postinfo Copyright (C) 2014 Skyarchnetworks Based on: This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation in the Version 2. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. */ function dashboard_postinfo_widget() { global $wpdb; // 無視するユーザID (カンマ区切りで記載) $user_ignore = '4,7'; // ユーザグループ配列 グループ名 => ユーザID (カンマ区切りで記載) $user_group = array( 'チーム1' => '1,2,3', 'チーム2' => '5,6,8', 'チーム3' => '9,10,11', ); // 個別に投稿数を取得する月 $post_date_conditions = array( date('Y-m', strtotime(date('Y-m-1').' -2 month')), date('Y-m', strtotime(date('Y-m-1').' -1 month')), date('Y-m'), ); // 統計情報集計 投稿数を個人毎/グループ毎に集計 foreach ($user_group as $group_name => $group_member) { $group_cnt[$group_name] = 0; foreach (explode(',', $group_member) as $member_id) { $member_cnt[$member_id] = 0; foreach ($post_date_conditions as $post_date) { $posts_cnt = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->posts WHERE post_author = '${member_id}' AND post_status = 'publish' AND post_type = 'post' AND post_date LIKE '${post_date}%'"); $group_cnt[$group_name] += $posts_cnt; $member_cnt[$member_id] += $posts_cnt; $member_info[$group_name][$member_id][$post_date] = $posts_cnt; } } } // 順番に表示 arsort($group_cnt); foreach($group_cnt as $group_name => $cnt) { echo "<div class='activity-block'><h4>${group_name} ${cnt}件</h4>"; arsort($member_info[$group_name]); foreach($member_info[$group_name] as $member_id => $post_cnt_month) { $usr = get_user_by('id', $member_id); $user_define[$member_id] = $usr; print get_avatar($member_id, 12) . $usr->user_nicename . "<br>"; print "<table>"; foreach ($post_cnt_month as $month => $cnt) { print "<td>" . substr($month, -2) . "月</td>"; print "<td>${cnt} 件</td>"; } print "<th>計 ${member_cnt[$member_id]}件</th></table>"; } echo "</div>"; } // 未所属ID表示 $users = get_users(array('orderby' => ID, 'order' => ASC)); foreach($users as $user) { $user_all[$user->id] = $user; } foreach(explode(',', $user_ignore) as $ignore_id) { unset($user_all[$ignore_id]); } // 全ユーザと定義ユーザの差分から無視ユーザを除く $user_diff = array_diff_key($user_all, $user_define); if (count($user_diff) > 0) { echo '<div class="activity-block"><h4>未所属ID(チーム割り当てを実施して下さい)</h4>'; foreach($user_diff as $user) { print get_avatar($user->id, 12) . ' ID:' . $user->ID . ' ' . $user->user_email . '<br>'; } echo '</div>'; } } function dashboard_postinfo_css() { ?> <style type="text/css"> </style> <?php } function dashboard_postinfo_widget_setup() { wp_add_dashboard_widget('dashboard_postinfo_widget_id', '統計情報(直近3ヶ月情報)', 'dashboard_postinfo_widget'); } // add styles to Dashboard only add_action('admin_head-index.php', 'dashboard_postinfo_css'); add_action('wp_dashboard_setup', 'dashboard_postinfo_widget_setup'); ?>