ショートコード / ブロック
用語集(登録用語の一覧)を出力します。注釈そのものは本文フィルタで自動表示されるため、ショートコード/ブロックは用語集ページ用です。
[cam_glossary sort="…" format="…" columns="…" status="…" category="…"]— 用語集を描画。属性はすべてサーバ側で検証・clamp されます(受理外は既定値へフォールバック)。- ブロック名
cam/glossary(「用語集」・apiVersion 3・カテゴリーwidgets)。ダイナミックブロック(save() => null)で、レンダリングはショートコードと同じGlossary::render()に委譲されます。エディタはServerSideRenderでサーバ出力をプレビュー。supports:html:false/align:["wide","full"]/anchor:true。
| 属性 | 受理値(既定) | 内容 |
|---|---|---|
sort | kana / category / title(既定 kana) | 並び順。kana は読み(reading)優先、欠落時は用語名。 |
format | short / detail / both(既定 short) | 表示する説明。short=短い説明、detail=詳細(HTML 許可)、both=両方。 |
columns | 整数 1〜4(既定 1) | 列数。範囲外は clamp。cam-glossary--cols-{n} クラスで反映(見た目は CSS)。 |
status | all / published(既定 all) | published は確認ステータスが「公開中」の用語のみに絞り込み。 |
category | 数値=term_id、文字列=slug(既定 空=絞り込みなし) | cam_term_category タクソノミーで絞り込み。解決不能なら絞り込み無効。 |
heading_level | 整数 2〜6(既定 2) | ショートコード/ブロックとも属性として受理・clamp されますが、現バージョンの出力は <dl>/<dt>/<dd> 構造のため、見出しレベルは実表示に影響しません。 |
1 回の描画で表示する用語は最大 500 件。超過時は先頭 500 件のみ表示し、その旨の注記を出します(無言の切り詰めはしません)。用語集コンテナには data-cam-skip="1" と cam-glossary クラスが付き、用語集自身への自己注釈を防ぎます。
カスタム投稿タイプ・タクソノミー
| 種別 | スラッグ | 用途 |
|---|---|---|
| 投稿タイプ | cam_term | 用語(辞書)。public => false、show_ui => true、show_in_menu => false、supports => ['title']、show_in_rest => true。フロントの単独ページは持たず、専用の用語管理画面に編集導線を集約。 |
| タクソノミー | cam_term_category | 用語カテゴリー(階層あり)。public => false、show_ui => true、show_in_rest => true。 |
用語名は投稿タイトル、その他の属性は post meta に保存されます(接頭辞 _cam_term_)。
| メタキー | 内容 |
|---|---|
_cam_term_reading | 読み方(並べ替え・検索用。検出には未使用) |
_cam_term_short_desc | 短い説明(ツールチップ用) |
_cam_term_detail | 詳細説明(注釈・脚注用。wp_kses_post) |
_cam_term_aliases | 別名・表記ゆれ(改行区切り。検出の needle に展開) |
_cam_term_detail_url | 詳細ページ URL |
_cam_term_default_format | 既定表示形式(tooltip / annotation / footnote) |
_cam_term_enabled | 有効/無効(無効は注釈に不使用) |
_cam_term_in_glossary | 用語集掲載トグル(既定 ON) |
_cam_term_status / _cam_term_ai_status | 確認ステータス / AI 生成ステータス |
_cam_term_detect_settings | 用語別の検出設定(article / batch の 2 プロファイルを 1 キーに保持) |
注釈を付ける「対象投稿」側にも meta が付きます(用語 CPT ではなく記事側)。
_cam_active_terms— その記事で採用(有効化)した用語の参照リスト(JSON)。本文非破壊の中核で、表示時にだけ装飾されます。_cam_ignored_terms— その記事で「今後無視」した用語 ID(候補から除外)。
主なオプション(接頭辞 cam_): cam_template_settings(表示テンプレート)・cam_exclude_settings / cam_exclude_selectors(除外ルール)・cam_ai_settings(AI)・cam_structured_data(構造化データ・既定 1)・cam_glossary_page_id(用語集ページ)・cam_uninstall_remove_all_data(アンインストール挙動)・cam_autoextract_batch_settings(バッチ設定)・cam_batch_state / cam_batch_seq / cam_batch_last_apply(バッチ状態)・cam_installed_version・ライセンス情報(cam_license_*)。バッチ候補は専用テーブル {prefix}cam_extraction_candidates に保存されます。
REST API
すべて名前空間 cam/v1、WordPress 標準の cookie nonce(wp_rest / X-WP-Nonce)で認証します。フロント公開用ではなく管理/編集画面用です。
| エンドポイント | メソッド / 権限 | 内容 |
|---|---|---|
/cam/v1/admin/terms | GET, POST / edit_posts | 用語の一覧(最大 100 件)・作成 |
/cam/v1/admin/terms/bulk | POST / edit_posts | 一括操作(enable / disable / add_category / remove_category / set_format / delete) |
/cam/v1/admin/terms/{id} | GET, POST/PUT, DELETE / edit_posts | 用語の取得・更新・削除(完全削除) |
/cam/v1/admin/term-categories[/{id}] | GET, POST/PUT, DELETE / edit_posts | 用語カテゴリーの一覧・作成・改名・削除 |
/cam/v1/terms, /terms/match, /terms/{id} | GET / edit_posts | エディタ用の用語検索(最大 20 件)・完全一致取得・単一取得 |
/cam/v1/extract/scan | POST / edit_posts | 未保存本文をスキャンして注釈候補を返す(本文サイズ上限 512KB) |
/cam/v1/extract/decorate | POST / edit_posts | 採用対象を span.cam-anno で装飾して返す(本文非破壊) |
/cam/v1/extract/active/{id} | GET, POST / edit_posts(+対象投稿の edit_post) | 採用用語(_cam_active_terms)の読み書き |
/cam/v1/extract/ignore/{id} | GET, POST, DELETE / edit_posts(+対象投稿の edit_post) | 「今後無視」リストの読み書き |
/cam/v1/batch/* | 各メソッド / manage_options | 全記事スキャン(settings / start / state / stop / resume / kick / clear / purge / candidates / terms / stats / approve / undo) |
フロントエンドの出力
- 注釈は
the_contentフィルタ(優先度 20)で表示時に付与されます。文字列置換ではなく DOMDocument でマーク要素/登録用語にのみ作用し、投稿本文(post_content)は書き換えません(本文非破壊)。 - 表示形式ごとのクラス: ツールチップ
.cam-tip(role="tooltip")、注釈ボックス.cam-box(role="note"・段落末尾にまとめて挿入)、脚注.cam-footnotes(本文に連番参照、末尾に一覧)。注釈マークは.cam-anno。 - CSS(ハンドル
cam_front、ファイルassets/css/cam-front.css)と JS(assets/js/cam-front.js・バニラ JavaScript/jQuery 非依存)は、注釈のあるページで読み込まれます(CSS は用語集のみのページでも読み込まれ、JS は注釈マークがあるページでのみ読み込まれます)。本文に注釈が無ければ DOM 処理もアセット読み込みも行いません。 - 本文に手動挿入された注釈マークは
span.cam-anno[data-cam-term]形式で、用語の内容(説明・URL・形式)は表示時に用語側から解決されます(用語を編集すれば再保存なしで反映)。 - 表示テンプレート(色・文字サイズ・アニメーション)は CSS カスタムプロパティ(
--cam-tip-bg等)として.cam-anno,.cam-box,.cam-footnotesにインライン注入されます。
構造化データ(JSON-LD)
- 注釈された用語を schema.org の
DefinedTerm/DefinedTermSetとしてwp_head(優先度 10)に出力します。 - 出力は 単一投稿ページ(
is_singular())で、注釈された用語があるときのみ。オプションcam_structured_data(既定 ON)が OFF ならフックごと登録されません。 - 「設定 > 用語集」で指定した用語集ページ(
cam_glossary_page_id)には、用語集全体のDefinedTermSet(hasDefinedTerm付き)を出力します。 - 注釈用語は方式C(
_cam_active_terms)と本文中のdata-cam-termの和集合で解決します。
管理側の処理(AJAX / admin-post / Settings API の区別)
| 種別 / アクション | 権限・nonce | 用途 |
|---|---|---|
AJAX cam_generate_term_desc | edit_posts / nonce cam_ai_generate | AI による用語説明文の下書き生成(wp_ajax_ のみ。nopriv なし) |
admin-post cam_batch_csv | manage_options / nonce cam_batch_csv | 候補の CSV 出力(UTF-8 BOM・CSV インジェクション対策つき) |
admin-post cam_dict_export / cam_dict_import / cam_dict_import_apply | manage_options / 各 nonce | 辞書のエクスポート/インポートのプレビュー/本適用 |
admin-post cam_activate_license / cam_deactivate_license | manage_options / nonce cam_license_nonce | ライセンスの有効化 / 無効化(共通の更新クライアント) |
Settings API(options.php) | manage_options | 設定画面(表示テンプレート・除外・AI・構造化データ・用語集・アンインストール)の保存。AJAX / REST ではありません。 |
全記事スキャンの実処理はバックグラウンドのチャンク実行です。Action Scheduler があればそれを、無ければ WP-Cron を使い、フック名 cam_batch_run_chunk(グループ cam-batch)で継続します(ライブラリは同梱しません)。スキャンは本文を変更しないドライランで、承認による反映も _cam_active_terms への追記(方式C)で本文を書き換えません。直前の承認 1 回分のみ取り消し可能です。
フック
現バージョンでは、cam_ 接頭辞の拡張用の公開フィルター/アクションフックは提供していません。表示の調整はショートコードの属性・除外設定・CSS(.cam-anno / .cam-tip / .cam-box / .cam-footnotes / .cam-glossary 起点)で行ってください。フックのご要望は管理画面のバグ報告ウィジェットまたはお問い合わせからお寄せください。
アンインストール時の挙動
プラグインをアンインストール(削除)しても、既定ではデータは削除されません。「コンテンツ注釈 > 設定」でデータ削除(オプション cam_uninstall_remove_all_data)を有効にしたうえでアンインストールした場合のみ、次のデータが削除されます。停止(無効化)では削除されません。
cam_接頭辞のオプション(設定・ライセンス情報を含む)_cam_接頭辞の post meta- バッチ候補テーブル
{prefix}cam_extraction_candidates(DROP)と辞書インポートの短命 transient cam_termの全用語投稿とその meta(完全削除)
※ v1.0 系ではマルチサイトのネットワーク一括削除には対応していません。