User Read Management
WordPressの読了管理機能
by Daisuke Yamasaki · github.com/yamasakidaisuke/user-read-management
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/yamasakidaisuke/user-read-management/archive/refs/heads/main.zipWordPressプラグイン - ユーザーごとに投稿の読了状態を管理するシステム
📋 概要
User Read Managementは、ユーザーが各投稿を読んだかどうかを追跡・管理できるWordPressプラグインです。特定のカテゴリーの投稿に「読みました」チェックボックスを表示し、読了状態を一覧表で確認できます。
動物病院向けに最適化: 獣医師、看護師、管理室、病院の4つのカスタムロールを自動作成し、職種別に表示・管理が可能です。bbPress権限も自動で付与されるため、フォーラム機能を維持したまま職種の区別ができます。
✨ 主な機能
1. 投稿ページでの読了チェックボックス
- 特定カテゴリー(
manuals,medical-information,essential_readings,resident-study-sessions,dr_aoki_archive)の投稿にチェックボックスを自動表示 - ログインユーザーが「読みました」をチェック可能
- AJAXによるリアルタイム保存
2. 読了状態一覧表示(ショートコード)
- ユーザーロール別表示:
- デフォルトで獣医師ロールのユーザーのみを表示
- カスタマイズで看護師、管理室、病院も表示可能
- カテゴリー別表示:
- 「必読資料」(essential_readings)
- 「診療マニュアル」(manuals)
- 「医療情報」(medical-information)
- 「研修医勉強会資料」(resident-study-sessions)
- 「青木先生による眼科講義」(dr_aoki_archive)
- カテゴリーごとの独立した表で見やすく整理
- 編集権限:
- 自分自身の状態: 誰でも変更可能
- 他ユーザーの状態: 管理者のみ変更可能
- セルクリックで状態を切り替え(済 ⇔ 未)
- 固定ヘッダー・固定列でスクロール時も見やすい
3. CSVエクスポート機能(管理者・管理室)
- 読了状態一覧をCSVファイルでダウンロード可能(管理者または管理室(bbPress権限)ロール)
- ファイル名:
YYYYMMDDHHmmss_end-of-reading-management.csv - カテゴリー列付きで分類しやすい
- Excel対応(UTF-8 BOM付き)
- タイムスタンプ付きで記録管理に最適
4. bbPress連携機能
- カスタムロールにbbPress権限を自動付与
bbPress登録ユーザーからの移行がスムーズ- フォーラム機能を維持したまま職種別管理が可能
- bbPressがない環境でも安全に動作
5. セキュリティ
- WordPress nonce による CSRF 対策
- 権限チェック(自分または管理者のみ編集可能)
- エラーログによる変更履歴の記録
🚀 インストール方法
方法1: 手動インストール
-
このリポジトリをダウンロード
git clone https://github.com/yamasakidaisuke/user-read-management.git -
user-read-managementフォルダをwp-content/plugins/にアップロード -
WordPress管理画面の「プラグイン」メニューから「User Read Management」を有効化
方法2: 直接アップロード
- ZIPファイルとしてダウンロード
- WordPress管理画面 > プラグイン > 新規追加 > プラグインのアップロード
- ZIPファイルを選択してインストール・有効化
📖 使い方
ショートコードの使用
固定ページや投稿に以下のショートコードを追加:
[read_status_overview]
これにより、カテゴリーごとに分かれた読了状態マトリックス表が表示されます:
- 必読資料 セクション
- 診療マニュアル セクション
- 医療情報 セクション
- 研修医勉強会資料 セクション
- 青木先生による眼科講義 セクション
各セクションに全ユーザー×投稿のマトリックス表が表示されます。
投稿ページでの表示
特定カテゴリー(manuals, medical-information, essential_readings, resident-study-sessions, dr_aoki_archive および manuals の子カテゴリー)に属する投稿を表示すると、投稿コンテンツの下に「読みました」チェックボックスが自動的に表示されます。
CSVエクスポート(管理者・管理室)
読了状態一覧表の下部に「CSVエクスポート」ボタンが表示されます(管理者、または管理室ロールのユーザー)。
- ボタンをクリック
- CSVファイルが自動ダウンロード
- ファイル名:
20251110123456_end-of-reading-management.csv(タイムスタンプ付き) - Excelで開くとそのまま日本語が正しく表示されます
👥 ユーザーロール設定(重要)
カスタムユーザーロールについて
このプラグインは以下の4つのカスタムユーザーロールを作成します:
- 獣医師(bbPress権限) (
veterinarian) - 読了管理表に表示されます - 看護師(bbPress権限) (
nurse) - 将来の機能拡張用 - 管理室(bbPress権限) (
admin_office) - 将来の機能拡張用 - 病院(bbPress権限) (
hospital) - 将来の機能拡張用
重要: 各ロールにはbbPress登録ユーザーと同じ権限が自動的に付与されます。そのため、bbPress登録ユーザーから上記のロールに変更しても、フォーラム機能は引き続き使用可能です。
初期設定手順
1. プラグインを有効化
プラグインを有効化すると、上記のカスタムロールが自動的に作成されます。
2. ユーザーにロールを割り当て
WordPress管理画面で各ユーザーにロールを設定:
- ユーザー → ユーザー一覧 に移動
- 編集したいユーザーをクリック
- 権限グループ(または役割)のドロップダウンから適切なロールを選択
- 獣医師の方 → 獣医師(bbPress権限)
- 看護師の方 → 看護師(bbPress権限)
- 管理室の方 → 管理室(bbPress権限)
- 病院アカウント → 病院(bbPress権限)
- ユーザーを更新をクリック
注意: bbPress登録ユーザーから上記のロールに変更しても、bbPressフォーラムは引き続き使用できます。権限は自動的に引き継がれます。
3. 表示確認
読了管理ページ([read_status_overview]ショートコード)を確認すると、獣医師ロールのユーザーのみが表示されます。
表示するロールの変更方法
将来的に看護師も表示したい場合など、user-read-management.php の以下の部分を変更:
// 265行目付近
$users = get_users(array(
'role' => 'veterinarian', // ← ここを変更
'fields' => array('ID', 'display_name')
));
複数ロールを表示する場合:
// 獣医師と看護師を表示
$users = get_users(array(
'role__in' => array('veterinarian', 'nurse'),
'fields' => array('ID', 'display_name')
));
⚙️ その他のカスタマイズ設定
プラグインファイル(user-read-management.php)内で以下の設定を変更できます:
対象カテゴリーの設定
$show_checkbox_categories = array('manuals', 'medical-information', 'essential_readings', 'resident-study-sessions', 'dr_aoki_archive');
チェックボックスを非表示にするユーザーID
$hide_checkbox_users = array(1, 10);
一覧表示から除外するユーザーID
$exclude_user_ids = array(1, 10);
一覧表示から除外する投稿ID
$exclude_post_ids = array(0);
🔧 技術仕様
環境要件
- WordPress 5.0 以上
- PHP 7.0 以上
- jQuery(WordPress同梱版)
データ構造
読了状態は WordPress の user_meta テーブルに保存されます:
meta_key: read_status_{post_id}
meta_value: 'read' または 'unread'
ファイル構成
user-read-management/
├── user-read-management.php # メインプラグインファイル(PHP)
├── read-status.js # フロントエンド JavaScript
└── README.md # このファイル
🎨 表示のカスタマイズ
CSSクラス
以下のクラスでスタイルをカスタマイズ可能:
.p-read-status- チェックボックスコンテナ.p-read-status-input- チェックボックス要素.p-read-status-label- ラベル要素.p-read-status-table- 一覧表テーブル.p-read-status-cell- 編集可能なセル.p-read-status-cell-readonly- 表示のみのセル
📊 使用例
スタッフ向けマニュアル管理
- 社内マニュアルを投稿として作成
- スタッフが各マニュアルを読了したかを追跡
- 管理者が全員の読了状況を一覧で確認
医療情報の確認管理
- 重要な医療情報を投稿
- 医療スタッフの既読状況を管理
- コンプライアンス対応の記録として活用
🔒 セキュリティ
- WordPress nonce による CSRF 対策
- 権限チェック(
current_user_can) - サニタイゼーション・エスケープ処理
- エラーログによる監査証跡
🐛 トラブルシューティング
チェックボックスが表示されない
- ログインしているか確認
- 投稿が対象カテゴリーに属しているか確認
- 自分のユーザーIDが除外リストに含まれていないか確認
状態が保存されない
- ブラウザのコンソールでJavaScriptエラーを確認
- WordPress の
wp_ajaxが正常に動作しているか確認 - サーバーのエラーログを確認
📝 変更履歴
Version 2.1
- 「研修医勉強会資料」「青木先生による眼科講義」カテゴリーを追加
- 新カテゴリー
resident-study-sessions(研修医勉強会資料)・dr_aoki_archive(青木先生による眼科講義)を対象カテゴリーに追加 - 投稿ページでの読了チェックボックス表示
- 読了状態一覧表に2セクションを最下部(医療情報の下)に追加
- CSVエクスポートに2カテゴリーを追加
- いずれも院内資料(hospital-information)の子で投稿は直下に入るため、子カテゴリー自動取得は不要
- 新カテゴリー
Version 1.9
- 「必読資料」カテゴリーを追加
- 新カテゴリー
essential_readings(必読資料)を対象カテゴリーに追加 - 投稿ページでの読了チェックボックス表示
- 読了状態一覧表に「必読資料」セクションを追加(医療情報の下)
- CSVエクスポートに「必読資料」カテゴリーを追加
- 新カテゴリー
- デザインをプロフェッショナルに改善
- セクション見出しのグラデーション背景をフラットな単色に変更
- 角丸(border-radius)を全て除去
- セルホバー時のスケールアニメーション(transform: scale)を除去
- 装飾的なbox-shadowを除去し、シンプルなborderに変更
- 固定列の影をborder-rightに変更
Version 1.8
- overflow: hidden を削除して sticky を完全動作させる
.p-read-status-tableからoverflow: hiddenを削除(sticky の妨げになっていた)- 角丸とシャドウをスクロールコンテナに移動(構造を明確化)
- 不要な
-webkit-stickyプレフィックスを削除 - 不要な
!importantを削除してCSSをシンプル化 - コメントを追加して再利用性を向上
- これで position: sticky が確実に動作します
Version 1.7
- テーブル構造を修正して固定機能を完全実装
<thead>と<tbody>タグを明示的に追加border-collapse: separateに変更(sticky との互換性向上)- CSSセレクタを
thead thに修正 - z-indexを最適化(ヘッダー: 10、先頭列: 5、左上: 15)
- Safari対応(
-webkit-sticky)を追加 - max-heightを900pxに変更
- 先頭行と先頭列が確実に固定されるように改善
Version 1.6
- スクロール固定機能を強化
- スクロールコンテナに高さ制限(max-height: 600px)を追加
- 横スクロール時に先頭列(投稿タイトル列)が確実に固定
- 縦スクロール時にヘッダー行が確実に固定
- ブラウザ全体ではなく表内でスクロール
- 先頭列の背景色(シマシマ)を維持
- ホバー効果も先頭列で正しく動作
Version 1.5
- bbPress権限を自動付与
- カスタムロール(獣医師、看護師、管理室、病院)にbbPress登録ユーザーと同じ権限を自動付与
bbPress登録ユーザーから各カスタムロールへの変更がスムーズに- フォーラム機能を維持したまま職種の区別が可能
- ロール表示名に「(bbPress権限)」を追加して誤認識を防止
- README.mdにbbPress権限の説明を追加
Version 1.4
- カスタムユーザーロール機能を追加
- 獣医師、看護師、管理室、病院の4つのカスタムロールを作成
- 読了管理表に表示するユーザーを「獣医師のみ」に変更
- プラグイン有効化/無効化でロールの自動作成/削除
- 将来的に複数ロール表示への拡張が容易
- README.mdにユーザーロール設定手順を追加
Version 1.3
- 表のデザインを大幅改善
- シマシマ背景(ゼブラストライプ)で行を見やすく
- 行全体のホバー効果(水色のハイライト)
- 編集可能なセルの拡大ホバー効果(黄色のハイライト)
- グラデーション付きカテゴリー見出し(紫系)
- ダークカラーのヘッダー行(#2c3e50)
- 読了済み(緑色)と未読(赤色)の色分け強化
- 表全体にシャドウと角丸を追加
Version 1.2
- 読了状態一覧表を2つのカテゴリー別に分割表示
- 「診療マニュアル」(manuals)
- 「医療情報」(medical-information)
- CSVエクスポートにカテゴリー列を追加
- 見やすいセクション見出しを追加
Version 1.1
- CSVエクスポート機能を追加(管理者のみ)
- タイムスタンプ付きファイル名でダウンロード
- Excel対応(UTF-8 BOM付き)
Version 1.0
- 初回リリース
- 読了チェックボックス機能
- 読了状態一覧表示機能
- 管理者による他ユーザー状態編集機能
- 全ユーザーが全員分の読了状態を閲覧可能
👤 作者
Daisuke Yamasaki
- GitHub: @yamasakidaisuke
📄 ライセンス
このプロジェクトは GPL v2 以降のライセンスの下で公開されています。
🤝 貢献
バグ報告や機能リクエストは、GitHub Issuesにてお願いします。
プルリクエストも歓迎します!
🔗 リンク
- リポジトリ: https://github.com/yamasakidaisuke/user-read-management
- 問題報告: https://github.com/yamasakidaisuke/user-read-management/issues
Made with ❤️ for WordPress