Developer

Content Annotation Manager — 開発者向け情報

フック・ショートコード・カスタム投稿タイプなど、本プラグインを拡張・連携するための技術情報です。

ショートコード / ブロック

用語集(登録用語の一覧)を出力します。注釈そのものは本文フィルタで自動表示されるため、ショートコード/ブロックは用語集ページ用です。

  • [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
属性受理値(既定)内容
sortkana / category / title(既定 kana並び順。kana は読み(reading)優先、欠落時は用語名。
formatshort / detail / both(既定 short表示する説明。short=短い説明、detail=詳細(HTML 許可)、both=両方。
columns整数 1〜4(既定 1列数。範囲外は clamp。cam-glossary--cols-{n} クラスで反映(見た目は CSS)。
statusall / published(既定 allpublished は確認ステータスが「公開中」の用語のみに絞り込み。
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 => falseshow_ui => trueshow_in_menu => falsesupports => ['title']show_in_rest => true。フロントの単独ページは持たず、専用の用語管理画面に編集導線を集約。
タクソノミーcam_term_category用語カテゴリー(階層あり)。public => falseshow_ui => trueshow_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/termsGET, POST / edit_posts用語の一覧(最大 100 件)・作成
/cam/v1/admin/terms/bulkPOST / 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/scanPOST / edit_posts未保存本文をスキャンして注釈候補を返す(本文サイズ上限 512KB)
/cam/v1/extract/decoratePOST / 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-tiprole="tooltip")、注釈ボックス .cam-boxrole="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)には、用語集全体の DefinedTermSethasDefinedTerm 付き)を出力します。
  • 注釈用語は方式C(_cam_active_terms)と本文中の data-cam-term の和集合で解決します。

管理側の処理(AJAX / admin-post / Settings API の区別)

種別 / アクション権限・nonce用途
AJAX cam_generate_term_descedit_posts / nonce cam_ai_generateAI による用語説明文の下書き生成(wp_ajax_ のみ。nopriv なし)
admin-post cam_batch_csvmanage_options / nonce cam_batch_csv候補の CSV 出力(UTF-8 BOM・CSV インジェクション対策つき)
admin-post cam_dict_export / cam_dict_import / cam_dict_import_applymanage_options / 各 nonce辞書のエクスポート/インポートのプレビュー/本適用
admin-post cam_activate_license / cam_deactivate_licensemanage_options / nonce cam_license_nonceライセンスの有効化 / 無効化(共通の更新クライアント)
Settings API(options.phpmanage_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 系ではマルチサイトのネットワーク一括削除には対応していません。