Cuerda-Feed-total Technical Specification

※ 2026年3月27日リリース・バージョン 4.0.24 の技術仕様書です。本仕様は予告なく変更される場合があります。

🔗trunk in cuerda-feed-total – WordPress Plugin Repository を見る

Document Scope

本書は、プラグインの目的、起動順序、配信経路、保存データ、フック、主要関数、外部連携、およびデバッグ方法をまとめた技術仕様書である。

ソース全体には概算で 26 個のクラス定義と 371 件前後の関数・メソッド定義が存在するため、本文では「グローバル関数」「公開メソッド」「重要な内部処理」を中心に扱い、残りは付録の索引で追跡する。

Plugin Overview

Cuerda-Feed-total は、WordPress 上の投稿を外部ニュース配信先向けフィードへ変換する配信プラグインである。単純な RSS 出力だけではなく、配信先ごとの XML 差分、本文整形、配信対象判定、投稿単位の除外制御、ライセンス確認、YNF 向け FTP 配信までを一体で担う。

Primary Capabilities
Capability Summary Primary Source Area
Admin UI 基本設定、配信先別設定、ライセンス表示、投稿編集画面の配信制御 UI を提供する。 includes/admin/
Feed Dispatch ?feed=cuerda_total&{isp} 形式のカスタムフィードを公開し、ISP ごとのジェネレータへ処理を委譲する。 includes/init.php, includes/rss/
Content Transformation 本文 HTML を配信先ルールに合わせて正規化・削除・タグ変換・埋め込み保全する。 includes/rss/content/
Distribution Policy カテゴリ、タグ、著者、投稿 ID、投稿ステータス、投稿タイプを組み合わせて配信対象を決定する。 includes/functions-utils.php, includes/rss/class-feed-query-builder.php
Revision Ledger 投稿ごとの配信状態を cuerda_revision_status に保持し、差分配信や削除通知の判定に使う。 includes/functions-transition-ledger.php, includes/functions-utils.php
YNF Publisher Yahoo! News 向け XML とアイキャッチを生成し、FTP/FTPS 経由で PUT 配信する。 includes/ynf/, includes/rss/class-feed-generator-ynf.php
License Gate cuerda.org のコントローラ API を参照し、配信先表示と実行可否を判定する。 includes/admin/class-api.php, includes/functions-license.php

Supported Distribution Keys

実装上の配信先キーは def, ynf, yjt, goo, dcm, spb, snf, gnf, lnr, ldn, isn, ant, trl である。

Architecture / Bootstrap Flow

Bootstrap Sequence

  1. cuerda-feed-total.php がプラグインヘッダ、バージョン、主要パス定数を定義する。
  2. 同ファイルで plugin_action_links_{plugin_basename} に設定リンクを追加する。
  3. includes/admin/class-admin.phpincludes/loader.phpincludes/init.php の存在確認を行い、欠落時は管理画面通知を出して静かに停止する。
  4. 管理画面系ファイルを読み込み、メニュー、設定登録、配信先別設定画面、ライセンス画面を構築する。
  5. Cuerda_Loader::init() がプリロード対象クラス、関数ファイル、オートローダを初期化する。
  6. includes/loader.php の末尾で init フックに Cuerda_YNF_Publisher::init() を登録する。
  7. includes/init.phpdo_feed_cuerda_total へコールバックを登録し、カスタムフィード入口を生成する。
  8. 有効化・無効化時は、存在する場合に限り Cuerda_Installer::activate() / Cuerda_Installer::deactivate() へ委譲する。

Runtime Components

Component Map
Area Main Files / Classes Responsibility
Bootstrap cuerda-feed-total.php, Cuerda_Loader ロード順序、依存ファイル読込、オートロード登録、起動エラーハンドリングを担う。
Admin Cuerda_Feed_Admin, Cuerda_Feed_Admin_Settings, Cuerda_Feed_Admin_Distribution, Cuerda_Feed_Admin_License, Cuerda_Feed_Admin_Options 管理画面メニュー、設定フォーム、ライセンス表示、配信先別設定項目の描画を担う。
Options / Sanitization Cuerda_Options_Helper, includes/functions-sanitization.php オプションアクセスの軽量キャッシュ、型変換、保存時サニタイズを担う。
Feed Core Cuerda_Total_Feed_Dispatcher, Cuerda_Total_Feed_Generator_Wrapper, Cuerda_Total_Feed_Generator_Base 公開フィードのディスパッチ、ライセンス判定、ジェネレータ選択、共通 RSS 出力を担う。
Feed Rendering Cuerda_Feed_Query_Builder, Cuerda_Feed_Channel_Renderer, Cuerda_Feed_Item_Renderer WP_Query 構築、channel 要素生成、item 要素生成を担う。
Content Pipeline Cuerda_Content_Config, Cuerda_Content_Renderer, Cuerda_Content_Processor, Cuerda_Content_Steps 本文の整形ルール解決、代替テンプレート処理、タグ変換、埋め込み復元、許可 HTML 制御を担う。
YNF Delivery Cuerda_Feed_Generator_YNF, Cuerda_YNF_Publisher, Cuerda_YNF_Info_Endpoint Yahoo! News 用 XML 生成、Revision 管理、FTP PUT、結果表示用 text/plain エンドポイントを担う。
Post Control Cuerda_Post_Ctrl, includes/functions-transition-ledger.php 投稿単位の配信除外 UI、REST/Classic の同期、除外時の revision 状態更新を担う。
CLI / Maintenance Cuerda_CLI_Validators, uninstall.php WP-CLI 検証コマンドとアンインストール時のデータ削除を担う。

Primary Execution Flows

Public Feed Flow

  1. init 時に do_feed_cuerda_total が登録される。
  2. アクセス時に Dispatcher が ISP キーを判定する。
  3. ライセンス有効性を確認後、Wrapper が ISP 固有ジェネレータまたは Base Generator を選ぶ。
  4. Query Builder が対象投稿を抽出する。
  5. Channel Renderer と Item Renderer が XML を組み立てる。
  6. 必要に応じて本文整形、デバッグコメント、利用ログ送信、デルタ消費時刻更新を行う。

YNF Publish Flow

  1. transition_post_status、除外トグル、または WP-Cron 予約を契機に Cuerda_YNF_Publisher が起動する。
  2. 対象投稿、ライセンス、投稿タイプ、除外状態、配信条件、冪等性ハッシュを確認する。
  3. 必要なら Cuerda_Feed_Generator_YNF::build_single_post_xml() 経由で単票 XML を生成する。
  4. ファイル名を決定し、アイキャッチ画像と XML を FTP/FTPS で送信する。
  5. 送信結果は post meta、option、debug log に反映される。

Admin Save Flow

  1. 管理画面では WordPress Settings API を用いて cuerda_total_* および cuerda_{isp}_* オプションを保存する。
  2. 投稿編集画面では Cuerda_Post_Ctrl が配信除外フラグを Classic Editor と Block Editor の両方で扱う。
  3. 保存後、Transition Ledger が cuerda_revision_status および補助 meta を更新する。

Feed Endpoints and ISP Matrix

Endpoint Model

?feed=cuerda_total&{isp}
公開フィードの基本形。{isp} は GET パラメータの存在で判定される。
?feed=cuerda_total&ynf
例外経路。公開エンドポイントでは YNF XML 自体を返さず、Cuerda_YNF_Info_Endpoint による text/plain の配信結果情報ページを返す。
?feed=cuerda_total&{isp}&delta=1
差分配信モードの要求。実際に有効化するかは cuerda_total_enable_publish_delta フィルタが決める。
?admin=true
公開フィードでは HTML コメント形式の管理用デバッグ情報、YNF 情報エンドポイントでは配信状況の追記情報を出力する。
?cat=true / ?tag=true
管理用デバッグ情報を有効化した場合に、カテゴリ一覧またはタグ一覧を追加出力する。

ISP Matrix

Distribution Matrix
Key Display Name Public Endpoint Behavior Generator Path Notes
def RSS2.0 標準 RSS 2.0 XML を返す。 Base Generator 常時有効 ISP。公開 status は publish 固定。
ynf Yahoo! News (JAPAN) 公開時は FTP 状況ページを text/plain で返す。 内部配信用 XML は Cuerda_Feed_Generator_YNF FTP/FTPS 配信、デバウンス、RevisionId 管理を持つ。
yjt Yahoo!JAPAN Timeline (JAPAN) RSS 互換 XML を返す。 Base Generator + feed-config.php JST タイムゾーンと独自 namespace を使う。
goo dmenu News (JAPAN) RSS 互換 XML を返す。 Base Generator 本文整形と動画要素の条件分岐が多い。
dcm docomo media (JAPAN) RSS 互換 XML を返す。 Base Generator table スタイル補正など一部 ISP 固有処理を持つ。
spb SPORTS BULL (JAPAN) RSS 互換 XML を返す。 Base Generator SPORTS BULL 専用カテゴリマッピングを持つ。
snf Smart News (JAPAN) RSS 互換 XML を返す。 Base Generator 広告スロットとロゴ関連オプションを持つ。
gnf Gnossy (JAPAN) RSS 互換 XML を返す。 Base Generator Gunosy / NewsPass / au Service Today 系タグ除外ロジックを含む。
lnr LINE NEWS (JAPAN) RSS 互換 XML を返す。 Base Generator 本文整形の比重が大きく、caption 正規化や allowed HTML 制御を利用する。
ldn Live Door News (JAPAN) RSS 互換 XML を返す。 Base Generator feed-config による差分出力が中心。
isn Infoseek News (JAPAN) RSS 互換 XML を返す。 Base Generator feed-config による差分出力が中心。
ant antenna* (JAPAN) RSS 互換 XML を返す。 Base Generator expire オプション対象。
trl TRILL (JAPAN) RSS 互換 XML を返す。 Base Generator 既定 post status が publish のみ。

注: ISP ごとの細かな要素差分は includes/rss/feed-config.php に集約され、本文変換差分は includes/rss/content/content-config.php および content-transform-map.php に集約される。

Data Model

Options and Transients

Persistent and Cached Data
Key / Pattern Type Purpose Notes
cuerda_total_* option 全体設定。対象投稿ステータス、投稿タイプ、投稿画面の配信制御、有効 ISP、ログ opt-out などを保持する。 基本設定画面から保存される。
cuerda_{isp}_* option 配信先別設定。タイトル、カテゴリ条件、関連リンク数、本文変換関連、FTP 設定などを保持する。 配信先別設定画面から保存される。
cuerda_ynf_category_{term_id} option Yahoo! News 用カテゴリマッピングを保持する。 マッピング設定の一部。
cuerda_controller_data transient ライセンス API の取得結果キャッシュ。 短時間キャッシュ。Cuerda_Feed_API::fetch_controller_data() が使用する。
cuerda_cached_categories, cuerda_cached_tags, cuerda_cached_authors transient 管理画面の選択補助一覧を 1 分キャッシュする。 配信設定フォームの描画負荷を下げる。
cuerda_feed_log_last_sent transient 利用ログ送信のレート制御に使う。 Feed Base Generator が使用する。
cuerda_total_last_delta_run_ts option 差分配信モードの最終実行時刻を保持する。 デルタクエリ構築時に参照される。
cuerda_ynf_result_info, cuerda_ynf_debug_info option YNF 配信結果の要約と詳細ログを保持する。 YNF 情報エンドポイントとパブリッシャが利用する。
cuerda_ynf_put_lock_{post_id}, cuerda_ynf_put_cooldown_{post_id}, cuerda_ynf_guard_{post_id} transient YNF 配信の二重実行防止、直後連続実行抑止、アクティビティガードに使う。 投稿ごとの一時ロック。

Cuerda_Options_Helper は、get_option() 結果をリクエスト中キャッシュし、updated_option / added_option / deleted_option でピンポイントに無効化する。

Post Meta

Post Meta Keys
Key Purpose Lifecycle
cuerda_revision_status 配信先ごとの状態、更新時刻、YNF の revision 付帯情報などを JSON で保持する主キー。 主要な正本。統一保存先。
_cuerda_revision_status 旧互換キー。 読み取り互換後に主キーへマージされ、削除される。
_cuerda_total_has_publish 当該投稿が publish に関与したことがあるかを示すスカラー補助値。 差分配信と削除判定に使う。
_cuerda_total_touched_ts 投稿が最後に触られた UNIX 時刻。 差分配信クエリの境界判定に使う。
_cuerda_total_demoted publish から非 publish に落ちた直後かを示す。 差分削除検知に使う。
_cuerda_post_exclude_{isp} 投稿単位の配信除外フラグ。 Classic / Block Editor 双方から更新される。
_cuerda_ynf_last_hash YNF 用 XML の前回ハッシュ。 冪等性と不要再送の抑止に使う。
_cuerda_ynf_first_sent YNF 初回送信時刻。 DateId / FirstCreated 固定ロジックを補助する。
_cuerda_old_rev, _cuerda_old_modified 旧版互換または過去実装由来の補助キー。 現行コードからの利用は限定的だが、アンインストール対象に含まれる。

cuerda_revision_status は REST 非公開かつ Custom Fields UI 非表示で扱われる。対して _cuerda_post_exclude_{isp} は Block Editor 連携のため REST 公開される。

Revision Status Shape

配信状態は投稿ごとに JSON として保持される。実装上の形は固定スキーマではなく、total 領域と ISP ごとの領域を浅く持つ連想配列である。

{
  "total": {
    "from": "draft",
    "to": "publish",
    "has_publish": 1,
    "updated": "2026-04-02 12:34:56"
  },
  "lnr": {
    "status": 2,
    "updated": "2026-04-02 12:35:01"
  },
  "ynf": {
    "status": 2,
    "rev": 3,
    "date_id": "20260402",
    "first_created_ts": 1775100000
  }
}

Uninstall Behavior

uninstall.php は、単一サイト・マルチサイトの両方を考慮しながら、cuerda_* 系 option / transient と関連 post meta を削除する。ブランド接頭辞のホワイトリストを使い、削除対象を明示的に絞っている。

Hooks (Actions & Filters)

Plugin-defined Hooks Fired via do_action() / apply_filters()

Custom Hook Definitions
Hook Type Parameters / Return Purpose Primary Location
cuerda_ynf_run_on_exclude_toggle action (int $post_id) YNF 除外トグル時の即時再評価を発火する。 includes/functions-transition-ledger.php
cuerda_status_codes filter array $codes, string $isp を受け取り配列を返す。 create / update / delete / excluded のコード体系を上書きする。 includes/functions-utils.php
cuerda_withdraw_on_exclude filter bool $default, string $isp を受け取り真偽値を返す。 除外 ON を delete 扱いに寄せるかを制御する。 includes/functions-utils.php
cuerda/feed/content_type filter string $content_type を返す。 レスポンスの Content-Type を調整する。 includes/rss/class-feed-dispatcher.php
cuerda_total_enable_publish_delta filter bool $requested, string $isp_key, array $args 差分配信モードを有効にするかを決定する。 includes/rss/class-feed-query-builder.php
cuerda_feed_channel_max_ts_cache_ttl filter int $ttl, array $post_types channel 日付計算結果のキャッシュ TTL を変更する。 includes/rss/class-feed-channel-renderer.php
cuerda_revision_status_code_delete filter int $delete_code 削除コードの解釈を変更する。 includes/rss/class-feed-item-renderer.php
cuerda_supported_video_isps filter array $isps 動画出力に対応する ISP 一覧を変更する。 includes/rss/class-feed-item-renderer.php
cuerda_goo_video_excluded_statuses filter array $statuses 動画除外ステータスの既定値を調整する。 includes/rss/class-feed-item-renderer.php
cuerda/content_renderer_callable filter callable|null $callable, WP_Post $post, array $config, string $isp 本文レンダラ差し替え点を提供する。 includes/rss/class-feed-item-renderer.php
cuerda_skip_allowed_html filter bool $skip, string $isp allowed HTML 適用をスキップするかを制御する。 includes/rss/content/class-content-processor.php
cuerda/ynf/author_name filter string $author_name, int $post_id YNF メタデータの著者名を変更する。 includes/rss/helpers/ynf-metadata.php
cuerda/ynf/article_type filter string $article_type, int $post_id YNF メタデータの記事種別を変更する。 includes/rss/helpers/ynf-metadata.php
cuerda/ynf/priority filter int $priority, int $post_id YNF 優先度を変更する。 includes/rss/helpers/ynf-metadata.php
cuerda/ynf/subject_code filter string $subject_code, int $post_id YNF subject code を変更する。 includes/rss/helpers/ynf-metadata.php
cuerda/ynf/related_area filter mixed $related_area, int $post_id YNF の地域情報を上書きする。 includes/rss/helpers/ynf-metadata.php
cuerda/ynf/property_items filter array $items, int $post_id YNF Property 要素群を拡張する。 includes/rss/helpers/ynf-metadata.php
cuerda_ynf_should_handle_post filter bool $default, int $post_id YNF Publisher の最終配信対象判定を差し替える。 includes/ynf/class-ynf-publisher.php
cuerda_ynf_build_xml_for_post filter string $xml, int $post_id, array $args YNF 単票 XML の生成結果を外部から提供できるようにする。 includes/ynf/class-ynf-publisher.php
cuerda_ynf_build_filenames filter array $names, int $post_id, array $context YNF XML / 画像のファイル名規則を差し替える。 includes/ynf/class-ynf-publisher.php
cuerda_ynf_hash_normalize_xml filter string $normalized, string $raw_xml YNF 冪等性ハッシュの正規化ルールを差し替える。 includes/ynf/class-ynf-publisher.php
cuerda_ynf_debounce_seconds filter int $seconds YNF 新規公開時のデバウンス秒数を変更する。 includes/ynf/class-ynf-publisher.php

Custom Action Hook Names Used for Scheduling or Internal Routing

Custom Hook Names Beyond Direct do_action()
Hook Type Producer Consumer Purpose
cuerda_ynf_run_debounced scheduled action wp_schedule_single_event() Cuerda_YNF_Publisher::run_debounced() 新規公開直後の YNF PUT を遅延実行する。
cuerda_ynf_purge_debug scheduled action wp_schedule_event() Cuerda_YNF_Publisher::purge_debug_option() YNF デバッグログ option を毎日クリアする。

また、includes/functions-utils.php には cuerda_ynf_build_filenamescuerda_ynf_should_handle_post に対する既定実装のフィルタ登録が含まれる。

WordPress Core Hooks Subscribed by the Plugin

Core Hook Subscriptions
Hook Primary Subscribers Purpose
plugin_action_links_{plugin_basename} cuerda_feed_add_settings_link() プラグイン一覧に設定リンクを追加する。
init cuerda_feed_total_init(), internal meta 登録クロージャ, Cuerda_YNF_Publisher::init() フィード登録、内部 meta 登録、YNF Publisher 初期化を行う。
do_feed_cuerda_total Dispatcher 起動クロージャ カスタムフィード入口。
admin_menu Cuerda_Feed_Admin 管理画面メニューを登録・再配置する。
admin_init Cuerda_Feed_Admin_Settings::register_settings(), cuerda_maybe_migrate_rev_status_once() 設定登録と互換移行フラグ処理を行う。
admin_enqueue_scripts Cuerda_Feed_Admin::enqueue_admin_assets(), Cuerda_Post_Ctrl::admin_enqueue_editor() 管理画面用 CSS / JS と投稿編集サイドバー統合を読み込む。
plugins_loaded Cuerda_Post_Ctrl::init() 内クロージャ 配信除外 UI を必要時のみ遅延初期化する。
add_meta_boxes Cuerda_Post_Ctrl::add_metabox() Classic Editor 用の配信除外メタボックスを追加する。
save_post cuerda_handle_post_ctrl_on_save(), Cuerda_Post_Ctrl::save() 配信除外保存と revision 状態更新を行う。
rest_after_insert_post Cuerda_Post_Ctrl::sync_rest_meta_to_db() Block Editor 経由の meta 保存を DB に確定同期する。
transition_post_status cuerda_on_transition_store_total(), Cuerda_YNF_Publisher::maybe_handle_transition() 公開遷移履歴保存と YNF 配信トリガを行う。
updated_post_meta, added_post_meta, deleted_post_meta YNF 除外フラグ変更ハンドラ Gutenberg / REST 経由の除外トグルを即時反映する。
shutdown Cuerda_YNF_Publisher::run_shutdown_queue() publish-to-publish 更新時の最終確定処理を行う。
is_protected_meta cuerda_hide_internal_meta_keys() 内部 meta を Custom Fields UI から隠す。
updated_option, added_option, deleted_option Cuerda_Options_Helper request-local option cache を無効化する。

有効化・無効化フローは register_activation_hook() / register_deactivation_hook() により登録される。

WordPress Core Hooks Consumed via Hook APIs

Core Hook Consumption
Hook Usage Primary Location
the_content 本文フィルタを適用した HTML を取得し、その後配信先別整形を行う。 includes/rss/content/class-content-renderer.php, includes/rss/class-feed-generator-ynf.php

Functions Reference

本文では、保守上の重要度が高いグローバル関数、公開メソッド、重要な内部ワークフローを優先して記述する。

Global Functions

cuerda_feed_total_init()

定義: includes/init.php

引数: なし / 戻り値: void

役割: do_feed_cuerda_total のコールバックを登録し、Dispatcher を呼び出すカスタムフィード入口を作る。

cuerda_get_distribution_options()

定義: includes/functions-utils.php

引数: なし / 戻り値: array

役割: ISP キーと表示名の正本マップを返す。管理画面、ライセンス画面、フィード確認ボタンが共有利用する。

cuerda_get_general_settings( $code )

定義: includes/functions-utils.php

引数: string $code / 戻り値: array

役割: 設定 UI のラベル、説明、既定値、最小値・最大値などをまとめて返す。

cuerda_get_revision_status_array( $post_id )

定義: includes/functions-utils.php

引数: int $post_id / 戻り値: array

役割: cuerda_revision_status を配列化して返す。旧キー _cuerda_revision_status が残っていれば統合し、主キーへ寄せる。

cuerda_save_revision_status_array( $post_id, array $data )

定義: includes/functions-utils.php

引数: int $post_id, array $data / 戻り値: void

役割: revision 状態配列を JSON 化して保存する。空配列なら関連 meta を削除する。

cuerda_matches_distribution_policy( int $post_id, string $isp )

定義: includes/functions-utils.php

引数: 投稿 ID と ISP キー / 戻り値: bool

役割: 著者、カテゴリ、タグ、投稿 ID の include / exclude 条件を評価し、配信対象可否を判定する。

cuerda_get_status_codes( string $isp )

定義: includes/functions-utils.php

引数: ISP キー / 戻り値: array

役割: revision 状態コードの既定値を返し、cuerda_status_codes フィルタで上書きを許可する。

cuerda_withdraw_on_exclude( string $isp )

定義: includes/functions-utils.php

引数: ISP キー / 戻り値: bool

役割: 投稿除外を delete 相当に変換するかを返す。

cuerda_check_license_status( $isp )

定義: includes/functions-license.php

引数: ISP キー / 戻り値: string

役割: 利用可能なライセンス一覧と比較し、valid または invalid を返す。

cuerda_display_license_status_notice()

定義: includes/functions-license.php

引数: なし / 戻り値: void

役割: ライセンス API の応答状態に応じた管理画面 notice を出力する。

cuerda_output_admin_debug_comment( $isp, $request_uri )

定義: includes/functions-admin-debug.php

引数: ISP キー、リクエスト URI / 戻り値: void

役割: ?admin=true 指定時に、バージョン、リクエスト情報、カテゴリ・タグ一覧、オプション値などをコメントとして埋め込む。

Public Methods

Cuerda_Loader::init()

定義: includes/loader.php

引数: なし / 戻り値: void

役割: プリロード対象クラス、関数ファイル、PSR-4 風オートローダを初期化する。

Cuerda_Feed_API::fetch_controller_data()

定義: includes/admin/class-api.php

引数: なし / 戻り値: array<string,mixed>

役割: cuerda.org のライセンスコントローラ API を読み、短時間 transient にキャッシュする。

Cuerda_Post_Ctrl::init()

定義: includes/admin/class-post-ctrl.php

引数: なし / 戻り値: void

役割: 投稿編集画面の配信除外 UI、REST meta 登録、保存同期を必要時のみ起動する。

Cuerda_Post_Ctrl::is_allowed_for_isp( $post_or_id, $isp )

定義: includes/admin/class-post-ctrl.php

引数: 投稿 ID または WP_Post、ISP キー / 戻り値: bool

役割: 投稿単位の配信除外フラグを評価し、出力可否を返す。

Cuerda_Total_Feed_Dispatcher::dispatch()

定義: includes/rss/class-feed-dispatcher.php

引数: なし / 戻り値: void

役割: ISP 判定、YNF 特例分岐、フィード生成バッファリング、ヘッダ送信、最終 XML 出力を行う。

Cuerda_Total_Feed_Generator_Wrapper::generate()

定義: includes/rss/class-feed-generator-wrapper.php

引数: なし / 戻り値: void

役割: ライセンス判定後、ISP ごとの custom generator または Base Generator へ委譲する。

Cuerda_Total_Feed_Generator_Base::generate()

定義: includes/rss/class-feed-generator-base.php

引数: なし / 戻り値: void

役割: 共通 RSS 骨格、channel / item 出力、管理用デバッグ情報、利用ログ送信を行う。

Cuerda_Feed_Query_Builder::build( $isp_code )

定義: includes/rss/class-feed-query-builder.php

引数: ISP キー / 戻り値: WP_Query

役割: 投稿タイプ、ステータス、author / term / post 条件、差分配信条件を最適化して最終クエリを返す。

Cuerda_Feed_Channel_Renderer::render( $isp, $config )

定義: includes/rss/class-feed-channel-renderer.php

引数: ISP キー、設定配列 / 戻り値: void

役割: channel 要素、ロゴ、日付、description、item 出力の入口を担う。

Cuerda_Feed_Item_Renderer::render( $query, $config, $isp )

定義: includes/rss/class-feed-item-renderer.php

引数: WP_Query、設定配列、ISP キー / 戻り値: void

役割: 各投稿の item 要素を組み立てる。除外トグル、future 扱い、削除通知、カテゴリ、動画、本文、関連記事の判定を含む。

Cuerda_Content_Config::get( $isp )

定義: includes/rss/content/class-content-config.php

引数: ISP キー / 戻り値: array

役割: content-config.phpglobal と ISP 個別設定をマージして返す。

Cuerda_Content_Processor::process( $html, $isp, $cfg = array(), $post = null )

定義: includes/rss/content/class-content-processor.php

引数: HTML、ISP キー、content 設定、投稿 / 戻り値: string

役割: 本文整形の中心。YouTube 追加、正規表現削除、埋め込み保全、タグ変換、allowed HTML 制御、画像・caption 補正などを一括実行する。

Cuerda_Content_Renderer::render( $post, $config, $isp, $ctx = array() )

定義: includes/rss/content/class-content-renderer.php

引数: 投稿、feed-config、ISP キー、出力コンテキスト / 戻り値: void

役割: the_content フィルタ済み本文または代替テンプレートを取り込み、最終 XML 要素へ出力する。

Cuerda_Feed_Generator_YNF::generate()

定義: includes/rss/class-feed-generator-ynf.php

引数: なし / 戻り値: void

役割: YNF 単票 XML を生成する。公開エンドポイントでは主にプレビューまたは空フィード返却用途で利用される。

Cuerda_Feed_Generator_YNF::build_single_post_xml( $post_id, $args = array() )

定義: includes/rss/class-feed-generator-ynf.php

引数: 投稿 ID、追加引数 / 戻り値: string

役割: YNF Publisher から再利用される単票 XML ビルダ。

Cuerda_YNF_Publisher::init()

定義: includes/ynf/class-ynf-publisher.php

引数: なし / 戻り値: void

役割: YNF 向けカスタムフック、コアフック、日次デバッグログクリアのスケジュールを登録する。

Important Internal Workflows

Cuerda_YNF_Publisher::maybe_handle_transition( $new, $old, $post )

主要トリガ: transition_post_status

役割: YNF 配信可否、delete 判定、republish-as-new、ロック、クールダウン、ハッシュ比較、FTP PUT 実行までを統括する中核処理。

Cuerda_YNF_Publisher::build_xml_for_post( $post_id, array $args )

役割: まず cuerda_ynf_build_xml_for_post フィルタを評価し、未提供なら Cuerda_Feed_Generator_YNF::build_single_post_xml() を呼ぶ。

Cuerda_YNF_Publisher::build_filenames( ... )

役割: DateId、MediaId、NewsItemId、Revision を基にファイル名を作り、cuerda_ynf_build_filenames で上書きを許可する。

Cuerda_YNF_Publisher::ftp_put_all( array $args )

役割: FTP/FTPS 接続、認証、パッシブモード化、画像 PUT、XML PUT を順番に実行する。

Cuerda_Feed_Query_Builder::maybe_apply_publish_delta_filters()

役割: ?delta=1 などの要求を解釈し、_cuerda_total_touched_ts と publish / demoted 条件に基づく差分抽出へ切り替える。

External Integrations

License and Telemetry

Remote HTTP Integrations
Integration Endpoint Shape Purpose
License Controller https://cuerda.org/feed/user/{SERVER_NAME}/authentication/controller.json ライセンス状態と配信先表示可否の取得。
Feed Log https://cuerda.org/feed/user/{SERVER_NAME}/authentication/feed_cuerda_log.php フィード生成時の利用ログ送信。

HTTP 通信は wp_remote_get() を使用し、ライセンス API の失敗時は fail-safe / fallback 挙動を持つ。ユーザーは cuerda_total_optout_log により利用ログ送信を抑止できる。

FTP / FTPS for YNF

YNF は、一般の公開フィードとは別に FTP または FTPS による push 配信を行う。接続先は cuerda_ynf_ftp_server, cuerda_ynf_ftp_user_name, cuerda_ynf_ftp_password, cuerda_ynf_ftp_remote_dir, cuerda_ynf_ftp_port, cuerda_ynf_ftp_secure で管理される。

パスワードは復号ヘルパー cuerda_decrypt_password() または cuerda_decrypt_value() を通じて取り扱われる。

WP-Cron

YNF では WP-Cron を二段階で利用する。ひとつは新規公開直後のデバウンス送信、もうひとつは日次のデバッグログクリアである。

WP-CLI

WP-CLI 環境では以下のコマンドが登録される。

  • wp cuerda validate-feed: 公開フィードの XML 妥当性検査
  • wp cuerda ynf-related: YNF 関連リンクブロックの検査
  • wp cuerda ynf-scan: 複数投稿の YNF 関連リンクルール検査
  • wp cuerda post-ctrl: 投稿単位の配信除外状態の確認・補助

Theme / Template Override

本文生成はテーマ側の代替テンプレート出力を取り込める設計であり、Cuerda_Content_Processor::get_alternate_template_output() が入口となる。これにより、WordPress テーマ側で本文の供給元を差し替えられる。

Error Handling / Debugging

Bootstrap and Feed Fail-soft Behavior

Primary Error Handling Patterns
Situation Behavior Location
必須ファイル欠落 管理画面 notice を出し、静かに停止する。 cuerda-feed-total.php
Loader / init 関数欠落 管理画面 notice を出し、以降の処理を止める。 cuerda-feed-total.php
未指定または非対応 ISP 500 を避けるため minimal RSS stub を返す。 includes/rss/class-feed-dispatcher.php
ライセンス無効 公開フィードは minimal stub、YNF 情報ページは簡易エラーメッセージを返す。 includes/rss/class-feed-generator-wrapper.php, includes/ynf/class-ynf-info-endpoint.php
YNF FTP 失敗 例外を結果要約と debug option に反映する。 includes/ynf/class-ynf-publisher.php

Developer-facing Debug Features

  • ?admin=true でフィードへ管理情報を追記できる。
  • ?cat=true?tag=true でカテゴリ / タグ一覧を出力できる。
  • YNF 情報エンドポイントは接続設定、done ディレクトリ、ログ状態を確認するための text/plain 画面を提供する。
  • cuerda_ynf_debug_infocuerda_ynf_result_info に配信ログを保持する。
  • WP-CLI バリデータにより XML 整形式や YNF 関連リンク仕様を検査できる。

Operational Safeguards

  • YNF には lock、cooldown、activity guard、XML hash 正規化による冪等性制御がある。
  • 差分配信では _cuerda_total_touched_ts_cuerda_total_demoted により削除系の取りこぼしを抑える。
  • 内部 meta は REST 非公開または protected 扱いにして誤編集を避ける。

Appendices

Appendix A: Class Index

以下は主要クラスの索引である。本文に詳細がないものも、クラス名と所在ファイルの対応をここで追跡する。

  • Cuerda_Loader - includes/loader.php
  • Cuerda_Options_Helper - includes/helpers/class-options-helper.php
  • Cuerda_CLI_Validators - includes/cli/class-cli-validators.php
  • Cuerda_Feed_Admin - includes/admin/class-admin.php
  • Cuerda_Feed_Admin_Settings - includes/admin/class-admin-settings.php
  • Cuerda_Feed_Admin_Distribution - includes/admin/class-admin-distribution.php
  • Cuerda_Feed_Admin_License - includes/admin/class-admin-license.php
  • Cuerda_Feed_Admin_Options - includes/admin/class-admin-options.php
  • Cuerda_Feed_Admin_Mapping - includes/admin/class-admin-mapping.php
  • Cuerda_Feed_API - includes/admin/class-api.php
  • Cuerda_Post_Ctrl - includes/admin/class-post-ctrl.php
  • Cuerda_Total_Feed_Dispatcher - includes/rss/class-feed-dispatcher.php
  • Cuerda_Total_Feed_Generator_Wrapper - includes/rss/class-feed-generator-wrapper.php
  • Cuerda_Total_Feed_Generator_Base - includes/rss/class-feed-generator-base.php
  • Cuerda_Feed_Generator_YNF - includes/rss/class-feed-generator-ynf.php
  • Cuerda_Feed_Query_Builder - includes/rss/class-feed-query-builder.php
  • Cuerda_Feed_Channel_Renderer - includes/rss/class-feed-channel-renderer.php
  • Cuerda_Feed_Item_Renderer - includes/rss/class-feed-item-renderer.php
  • Cuerda_Content_Config - includes/rss/content/class-content-config.php
  • Cuerda_Content_Renderer - includes/rss/content/class-content-renderer.php
  • Cuerda_Content_Processor - includes/rss/content/class-content-processor.php
  • Cuerda_Content_Pipeline - includes/rss/content/class-content-pipeline.php
  • Cuerda_Content_Steps - includes/rss/content/class-content-steps.php
  • Cuerda_Content_Embeds - includes/rss/content/content-embeds.php
  • Cuerda_YNF_Publisher - includes/ynf/class-ynf-publisher.php
  • Cuerda_YNF_Info_Endpoint - includes/ynf/class-ynf-info-endpoint.php

Appendix B: Global Function Index

本文に詳細を載せない関数群は、ファイル単位の索引として追跡する。

Function Index by File
File Indexed Symbols
includes/functions-sanitization.php cuerda_sanitize_* 系、暗号化パスワード処理、数値リスト正規化。
includes/functions-cache.php cuerda_get_cached_categories(), cuerda_get_cached_tags(), cuerda_get_cached_authors()
includes/functions-license.php always-enabled ISP 判定、display ISP 一覧、license ISP 一覧、notice 表示。
includes/functions-transition-ledger.php 投稿ステータス遷移追跡、publish delta 時刻管理、投稿除外反映、YNF トグル連携。
includes/functions-admin-debug.php 管理デバッグ出力、カテゴリ・タグ一覧、option ダンプ、メモリ使用量表示。
includes/functions-admin.php 管理画面の基本設定・配信先別設定項目定義。
includes/helpers/functions-crypto.php cuerda_crypto_key(), cuerda_encrypt_value(), cuerda_decrypt_value()
includes/rss/helpers/ynf-metadata.php YNF メタデータ描画、subject code 解決、related area 推定。
includes/functions-utils.php 配信先一覧、設定メタデータ、revision helpers、policy 判定、YNF ファイル名既定フィルタなど、多数の共通関数。

技術者向けの情報に戻る

©cuerda™