| 📷 | 講師名 ▲ | 所属 ▼ | 担当講義数 ▼ | 公開状態 | 更新日 ▼ | |
|---|---|---|---|---|---|---|
👤 |
佐藤 和子 | 社会福祉法人あおぞら会 | 8件 | 公開 | 2026-10-14 | |
👤 |
田中 健一 | 外部講師(医療法人山吹会) | 5件 | 公開 | 2026-10-12 | |
👤 |
鈴木 美咲 | 社内(事務局) | 3件 | 公開 | 2026-10-10 | |
👤 |
山田 太郎 | 外部講師(介護技術研究所) | 6件 | 非公開 | 2026-09-28 | |
👤 |
高橋 直人 | 大学・研究機関(福祉大学院) | 4件 | 公開 | 2026-09-20 | |
👤 |
伊藤 美紀 | 社内(事務局) | 2件 | 公開 | 2026-09-15 | |
👤 |
渡辺 光男 | 外部講師(NPO法人福祉人材センター) | 0件 | 非公開 | 2026-09-05 | |
👤 |
中村 幸恵 | 社会福祉法人ひまわり福祉会 | 1件 | 公開 | 2026-08-30 | |
| 📷 | 講師名 | 所属 | 担当講義数 | 公開状態 | 更新日 |
カスタム投稿タイプ lms_instructor として実装。WP_List_Table を継承した LMS_Instructor_List_Table クラスで一覧画面を構築する。管理メニューは add_submenu_page() で「コンテンツ管理」親メニュー(スラッグ: lms-contents)配下に「講師」として登録。メニュースラッグは lms-instructors。カスタムカラム(アバター、所属、担当講義数、公開状態)は manage_lms_instructor_posts_columns フィルタで定義し、manage_lms_instructor_posts_custom_column アクションで出力。「担当講義数」は web_lecture 投稿の instructor_id メタ値で集計し、クリック時は B-CNT-001(Web講義管理一覧)を講師フィルタ付きで表示。ソート対応カラムは講師名・担当講義数・更新日。
閲覧・編集・登録・削除はすべて manage_lms_content ケイパビリティを必須とする。事務局(管理者)ロールのみ付与。一般の editor / author ロールにはメニューを表示しない(add_submenu_page() の第3引数に manage_lms_content を指定)。講師プロフィールの公開/非公開はフロントエンド表示に直結するため、変更操作は manage_lms_content 権限チェック後に実行する。将来的に「コンテンツ編集者」ロールを追加する場合は閲覧・編集のみ許可し、削除・公開変更は管理者に限定する設計とする。
カスタム投稿タイプ lms_instructor を使用。主要カスタムフィールド(ACF Pro で管理): instructor_avatar(プロフィール画像・メディアライブラリID)、instructor_affiliation(所属・自由テキスト)、instructor_affil_type(所属種別: internal / external_medical / external_welfare / external_academic / external_other)、instructor_title(肩書き)、instructor_profile(プロフィール本文・ textarea)、instructor_sort_order(表示順・数値)。担当講義数はカラム表示時に $wpdb->get_var() でリアルタイム集計。将来的にキャッシュ化(Transients API)を検討。
一括操作(Bulk Actions): 「公開にする」(post_status を publish に変更)、「非公開にする」(post_status を private に変更)、「ゴミ箱へ移動」(post_status を trash に変更)。get_bulk_actions() メソッドで定義、process_bulk_action() で実行。行アクション(Row Actions): 「編集」→ 編集画面(B-CNT-004 編集画面)へ遷移、「表示」→ フロントエンドの講師プロフィールページへ遷移(公開時のみ表示)、「ゴミ箱」→ ゴミ箱ステータスへ変更(担当講義が存在する場合は確認ダイアログを表示)。担当講義数が0件の講師に「表示」アクションは表示しない。
表示列の選択: アバター / 講師名 / 所属 / 担当講義数 / 公開状態 / 更新日。デフォルトはすべて表示。ページあたり表示件数: デフォルト20件(講師数は最大数十名程度の想定のため1ページに収まるケースが多い)。set-screen-option フィルタで lms_instructors_per_page キーとして保存。所属フィルタの選択肢は instructor_affil_type メタ値に基づきドロップダウンを動的生成する。
講師数は数十名規模の想定のため大量データは基本的に発生しないが、担当講義数の集計クエリは一覧表示のたびに行数分実行されるため、Transients API(TTL: 1時間)でキャッシュし、講師情報・講義情報の更新時(save_post フック)にキャッシュを破棄する設計とする。公開状態変更・削除操作はすべて wp_nonce_field() / check_admin_referer() で CSRF 対策を施す。アバター画像は WordPress メディアライブラリ経由でアップロードし、直接ファイルパスを入力させないことで任意ファイルアップロードリスクを排除する。プロフィール本文は wp_kses_post() でサニタイズして保存。一括操作処理後はリダイレクトで二重送信を防止(PRG パターン)。ゴミ箱は30日後に自動完全削除(EMPTY_TRASH_DAYS 定数)。