Seory Posts to Markdown

説明

Seory Posts to Markdown は、サイトのコンテンツをクリーンな Markdown ファイルに変換し、1つの ZIP アーカイブにまとめるプラグインです。AI ツールや静的サイトジェネレーター、Markdown ベースのあらゆるワークフローにそのまま渡せます。

処理はお使いのサーバー内で行われます。API キーやアカウント登録は不要で、このプラグイン自体が利用する外部サービスもありません。エディター保存内容 (Raw) のモードでは、変換時に外部サービスと通信しません。ZIP エクスポートのレンダリング済みコンテンツのモードでは、投稿を表示するときと同じ本文フィルターを WordPress が適用するため、埋め込み (oEmbed)、テーマ、他のプラグインが外部サービスと通信することがあります。詳しくは FAQ をご覧ください。

主な機能

  • 投稿・固定ページ・公開カスタム投稿タイプをワンクリックで書き出し
  • YAML front matter: タイトル、日付、投稿タイプ、ステータス、スラッグ、リンク、著者、アイキャッチ画像、カテゴリー、タグ、カスタムタクソノミーのターム、下書きフラグ
  • 2つの本文モード: エディター保存内容そのまま、またはショートコードとブロックを展開した完全レンダリング済みコンテンツ(the_content フィルター適用)
  • 投稿タイプごとのタクソノミー絞り込み (カテゴリー、カスタムタクソノミー) と全体の期間指定。下書きを含めることも可能
  • 柔軟な出力レイアウト: フラット(slug.md)、投稿ごとのフォルダー(slug/index.md)、日付プレフィックス(2024-01-15-slug.md)、年別・年月別フォルダー
  • オプションで index.md (目次) を生成 — アーカイブを AI ツールに渡す際の入口として便利です
  • GFM テーブル、フェンス付きコードブロック、ATX 見出しに対応
  • バッチ処理により、大規模サイトでも PHP の実行時間制限内で処理できます
  • 読み取り専用の WordPress アビリティ (Abilities、WordPress 6.9 以降) により、AI ツールがサイト自身の REST API を通じて、更新された投稿の一覧取得、投稿の Markdown での取得、外部リンクの一覧取得を行えます

このプラグインが行わないこと

  • 画像はダウンロードしません。画像 URL は Markdown の参照として残ります
  • script・style・noscript 要素は出力から除外されます

関連

ブラウザ版 (インストール不要で WordPress エクスポート XML を変換) は tools.seory.co.jp/wp-to-markdown で利用できます。

スクリーンショット

インストール

  1. プラグインをインストールして有効化します。
  2. 「ツール Seory Posts to Markdown」を開きます。
  3. 投稿タイプと出力オプションを選び、「変換して ZIP をダウンロード」をクリックします。

FAQ

コンテンツはどこかに送信されますか ?

このプラグインがコンテンツを開発者に送信することはなく、このプラグイン自体が利用する外部サービスもありません。変換はお使いのサーバー内で実行され、生成された ZIP はダウンロード直後に削除されます。それ以外に外部サービスとの通信が発生するかどうかは、本文モードによって異なります:

  • エディター保存内容 (Raw) (ZIP エクスポート、および mode=raw を指定した get-post-markdown): the_content フィルターを実行しないため、変換時に外部サービスと通信しません。
  • ZIP エクスポートの レンダリング済みコンテンツ: 投稿を表示するときとまったく同じように the_content フィルターが実行されます。投稿内に埋め込み可能な URL が単独の行で書かれている場合 (YouTube のリンクなど)、WordPress の oEmbed 機能がその提供元に埋め込みコードを要求し、投稿メタにキャッシュすることがあります。また、the_content にフックしているテーマや他のプラグインが独自に通信することもあります。
  • アビリティ (mode=rendered を指定した get-post-markdown、および list-external-links): レンダリング中は oEmbed を無効にするため、oEmbed の通信も oEmbed キャッシュへの書き込みも行いません。埋め込みは元の URL のまま残ります。the_content の中でテーマや他のプラグインが行う通信は遮断しません。

2つの本文モードの違いは ?

エディター保存内容 (Raw) は保存されている本文をそのまま変換します。ショートコードは展開されず、ブロックのコメントは除去されます。レンダリング済みコンテンツ は先に the_content フィルターを適用し、ショートコードやブロックを最終的な HTML に展開してから変換します。

どのユーザー権限で使えますか ?

  • ZIP エクスポート (ツール Seory Posts to Markdown): export 権限を持つユーザー (デフォルトでは管理者)。
  • アビリティ (AI ツール向け、WordPress 6.9 以降): 公開済みの投稿はログインしているすべてのユーザー、それ以外のステータスは編集者と管理者が利用できます。いずれの場合も、そのユーザーが閲覧または編集できる投稿に限られます。詳しくは下記の「どのアビリティがあり、誰が使えますか ?」をご覧ください。

カスタム投稿タイプに対応していますか ?

はい。公開 (public) のカスタム投稿タイプはすべて投稿タイプ一覧に表示されます。

front matter はカスタマイズできますか ?

はい。開発者は seoryco_wpmd_frontmatter フィルターでキーの追加・削除・並べ替えができます:

add_filter( 'seoryco_wpmd_frontmatter', function ( $pairs, $post ) {
    $pairs['subtitle'] = '"' . get_post_meta( $post->ID, 'subtitle', true ) . '"';
    return $pairs;
}, 10, 2 );

値は YAML 形式で指定してください。空文字列のキーは出力から省略されます。

AI ツールからコンテンツに直接アクセスできますか ?

はい (任意で利用できる機能です)。バージョン 0.2 から、WordPress 6.9 以降では、投稿の一覧取得、1 件の投稿の Markdown での取得、外部リンクの一覧取得のための読み取り専用の WordPress アビリティ (wp_register_ability()) を登録します。AI ツールやエージェント (Claude Code や Codex など) は、アプリケーションパスワードを使って WordPress 自身の REST エンドポイント (/wp-json/wp-abilities/v1/abilities/...) からこれらを呼び出せます。認証方式は WordPress 標準の REST API と同じです。リクエストはほかの REST API クライアントとまったく同じく、AI ツールからお使いのサイトへ送られます。このプラグインがコンテンツを開発者やほかのサービスへ送信することはありません (レンダリング時に通信が発生しうる先は「コンテンツはどこかに送信されますか ?」をご覧ください)。この用途には、権限を絞った専用の WordPress ユーザーを作成することをおすすめします。

サードパーティの MCP Adapter プラグインもインストールすると、これらのアビリティを MCP ツールとして公開することもできます。MCP Adapter はこのプラグインには同梱されていません。

どのアビリティがあり、誰が使えますか ?

アビリティはすべて読み取り専用で、GET で呼び出します。入力は input[...] のクエリパラメーターとして渡します:

  • seoryco-wpmd/list-posts — 指定日時 (modified_after。例: 2026-09-01T00:00:00Z) より後に更新された投稿を、更新の古い順に返します
  • seoryco-wpmd/list-post-ids — すべての投稿 ID をステータスと更新日時付きで、ゴミ箱内も含めて ID 順に返します。削除の検知に使います
  • seoryco-wpmd/get-post-markdown — 1 件の投稿を front matter 付きの Markdown で返します。形式は ZIP エクスポート内のファイルと同じです (mode=rendered でも埋め込みは取得せず、元の URL のまま残ります。mode=raw には投稿の編集権限が必要です)
  • seoryco-wpmd/list-external-links — 他ドメインへのリンクを、アンカーテキスト、rel、target、周辺の文とともに返します。1 投稿あたり最大 200 件まで (truncated)、各投稿のレンダリング後の HTML は先頭 1 MB だけを解析します (content_truncated、content_truncated_post_ids。サイズは開発者が seoryco_wpmd_links_max_html_bytes フィルターで変更できます)

一覧系のアビリティはカーソルでページ送りします。レスポンスの next_cursor (list-posts と list-external-links) または next_after_id (list-post-ids) を次のリクエストの cursor / after_id として渡し、ほかの入力は変えずに、値が null になるまで繰り返します。ページ送りの途中で投稿が編集・削除されても、ほかの投稿が取りこぼされることはありません。

「更新日時」は実効更新日時です。通常は post_modified_gmt を使い、これが 0000-00-00 00:00:00 の場合 (一部のインポーターが直接挿入した下書き) は、post_modified をサイトの現在の UTC オフセットで GMT に換算した値を使います。既知の制限: list-posts や list-external-links のページ送りの途中でサイトのタイムゾーンが夏時間と標準時の間で切り替わると、こうした投稿は日時が 1 時間ずれ、その回の取得から漏れることがあります。list-post-ids で定期的に (たとえば月 1 回) 全件を照合すれば拾えます。

権限は 2 段階で確認します:

  • リクエスト単位: 公開済みの投稿だけを対象とするリクエストは、ログインしているユーザー (read 権限) であれば実行できます。下書き・レビュー待ち・予約済み・非公開・ゴミ箱内の投稿を含むリクエストには edit_others_posts 権限 (デフォルトでは編集者と管理者) が必要です。list-post-ids は常に edit_others_posts 権限が必要です。このリクエスト単位の権限は、開発者が seoryco_wpmd_ability_permission フィルターで変更できます。
  • 投稿単位: 対象は公開表示される投稿タイプだけで、各投稿は、ユーザーが閲覧できる (read_post。公開済み・非公開の投稿) か編集できる (edit_post。下書き・レビュー待ち・予約済み・ゴミ箱内の投稿) 場合にだけ含まれます。独自の権限を持つ投稿タイプは、その権限で確認します。上記のフィルターでこの範囲を広げることはできません。
  • 保存内容 (Raw): mode=raw を指定した get-post-markdown には、標準の REST API の content.raw と同様に、投稿の編集権限 (edit_post) も必要です。保存内容 (Raw) は the_content フィルターを通りませんが、会員制プラグインなどのコンテンツ制限プラグインは、多くの場合このフィルターで本文を隠しています。投稿を編集できないユーザーは mode=rendered を使います。こちらではそれらの制限が適用されます。

パスワード保護された投稿は、Markdown として返すこともリンクを解析することもありません。

評価

このプラグインにはレビューがありません。

貢献者と開発者

Seory Posts to Markdown はオープンソースソフトウェアです。以下の人々がこのプラグインに貢献しています。

貢献者

“Seory Posts to Markdown” は1ロケールに翻訳されています。 翻訳者のみなさん、翻訳へのご協力ありがとうございます。

“Seory Posts to Markdown” をあなたの言語に翻訳しましょう。

開発に興味がありますか ?

コードを閲覧するか、SVN リポジトリをチェックするか、開発ログを RSS で購読してみてください。

変更履歴

0.2.1

  • セキュリティ: mode=raw を指定した get-post-markdown に、投稿の編集権限が必要になりました。これまでは、公開済みの投稿を閲覧できるログインユーザーなら誰でも保存されている本文を取得でき、会員制プラグインが the_content フィルターで適用するコンテンツ制限を回避できていました。mode=rendered の動作は変わりません。
  • 堅牢化: 本文フィルターで例外が発生した場合も、レンダリングでの変換がグローバルの投稿を元に戻すようにしました。これにより、後続のフィルターが誤った投稿を確認することはありません。

0.2

  • 新機能: AI ツール向けの読み取り専用 WordPress アビリティ — list-posts、list-post-ids、get-post-markdown、list-external-links (WordPress 6.9 以降)。
  • 新機能: アビリティを実行できるユーザーを調整する seoryco_wpmd_ability_permission フィルター。
  • 新機能: list-external-links が解析する 1 投稿あたりの HTML サイズを変更できる seoryco_wpmd_links_max_html_bytes フィルター (デフォルトは 1 MB)。
  • 変更: WordPress 6.9 以降が必要になりました。
  • 変更: ZIP エクスポートのレンダリング済みコンテンツのモードでは、投稿を表示するときと同様に、埋め込み (oEmbed)、テーマ、プラグインによる通信が発生しうることを明記しました。アビリティはレンダリング中に oEmbed を無効にします。
  • ZIP エクスポートの動作は従来どおりです。

0.1

  • 初回リリース。