WP Manifestindependent plugin directory
manifest / users / user-read-management

User Read Management

WordPressの読了管理機能

by Daisuke Yamasaki · github.com/yamasakidaisuke/user-read-management

0stars
0forks

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.zip

WordPressプラグイン - ユーザーごとに投稿の読了状態を管理するシステム

📋 概要

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: 手動インストール

  1. このリポジトリをダウンロード

    git clone https://github.com/yamasakidaisuke/user-read-management.git
  2. user-read-management フォルダを wp-content/plugins/ にアップロード

  3. WordPress管理画面の「プラグイン」メニューから「User Read Management」を有効化

方法2: 直接アップロード

  1. ZIPファイルとしてダウンロード
  2. WordPress管理画面 > プラグイン > 新規追加 > プラグインのアップロード
  3. ZIPファイルを選択してインストール・有効化

📖 使い方

ショートコードの使用

固定ページや投稿に以下のショートコードを追加:

[read_status_overview]

これにより、カテゴリーごとに分かれた読了状態マトリックス表が表示されます:

  1. 必読資料 セクション
  2. 診療マニュアル セクション
  3. 医療情報 セクション
  4. 研修医勉強会資料 セクション
  5. 青木先生による眼科講義 セクション

各セクションに全ユーザー×投稿のマトリックス表が表示されます。

投稿ページでの表示

特定カテゴリー(manuals, medical-information, essential_readings, resident-study-sessions, dr_aoki_archive および manuals の子カテゴリー)に属する投稿を表示すると、投稿コンテンツの下に「読みました」チェックボックスが自動的に表示されます。

CSVエクスポート(管理者・管理室)

読了状態一覧表の下部に「CSVエクスポート」ボタンが表示されます(管理者、または管理室ロールのユーザー)。

  1. ボタンをクリック
  2. CSVファイルが自動ダウンロード
  3. ファイル名: 20251110123456_end-of-reading-management.csv(タイムスタンプ付き)
  4. Excelで開くとそのまま日本語が正しく表示されます

👥 ユーザーロール設定(重要)

カスタムユーザーロールについて

このプラグインは以下の4つのカスタムユーザーロールを作成します:

  • 獣医師(bbPress権限) (veterinarian) - 読了管理表に表示されます
  • 看護師(bbPress権限) (nurse) - 将来の機能拡張用
  • 管理室(bbPress権限) (admin_office) - 将来の機能拡張用
  • 病院(bbPress権限) (hospital) - 将来の機能拡張用

重要: 各ロールにはbbPress登録ユーザーと同じ権限が自動的に付与されます。そのため、bbPress登録ユーザーから上記のロールに変更しても、フォーラム機能は引き続き使用可能です。

初期設定手順

1. プラグインを有効化

プラグインを有効化すると、上記のカスタムロールが自動的に作成されます。

2. ユーザーにロールを割り当て

WordPress管理画面で各ユーザーにロールを設定:

  1. ユーザーユーザー一覧 に移動
  2. 編集したいユーザーをクリック
  3. 権限グループ(または役割)のドロップダウンから適切なロールを選択
    • 獣医師の方 → 獣医師(bbPress権限)
    • 看護師の方 → 看護師(bbPress権限)
    • 管理室の方 → 管理室(bbPress権限)
    • 病院アカウント → 病院(bbPress権限)
  4. ユーザーを更新をクリック

注意: 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
  • サニタイゼーション・エスケープ処理
  • エラーログによる監査証跡

🐛 トラブルシューティング

チェックボックスが表示されない

  1. ログインしているか確認
  2. 投稿が対象カテゴリーに属しているか確認
  3. 自分のユーザーIDが除外リストに含まれていないか確認

状態が保存されない

  1. ブラウザのコンソールでJavaScriptエラーを確認
  2. WordPress の wp_ajax が正常に動作しているか確認
  3. サーバーのエラーログを確認

📝 変更履歴

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

📄 ライセンス

このプロジェクトは GPL v2 以降のライセンスの下で公開されています。

🤝 貢献

バグ報告や機能リクエストは、GitHub Issuesにてお願いします。

プルリクエストも歓迎します!

🔗 リンク


Made with ❤️ for WordPress