説明
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 で利用できます。
インストール
- プラグインをインストールして有効化します。
- 「ツール Seory Posts to Markdown」を開きます。
- 投稿タイプと出力オプションを選び、「変換して 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の中でテーマや他のプラグインが行う通信は遮断しません。
- エディター保存内容 (Raw) (ZIP エクスポート、および
-
2つの本文モードの違いは ?
-
エディター保存内容 (Raw) は保存されている本文をそのまま変換します。ショートコードは展開されず、ブロックのコメントは除去されます。レンダリング済みコンテンツ は先に
the_contentフィルターを適用し、ショートコードやブロックを最終的な HTML に展開してから変換します。 -
どのユーザー権限で使えますか ?
-
- ZIP エクスポート (ツール Seory Posts to Markdown):
export権限を持つユーザー (デフォルトでは管理者)。 - アビリティ (AI ツール向け、WordPress 6.9 以降): 公開済みの投稿はログインしているすべてのユーザー、それ以外のステータスは編集者と管理者が利用できます。いずれの場合も、そのユーザーが閲覧または編集できる投稿に限られます。詳しくは下記の「どのアビリティがあり、誰が使えますか ?」をご覧ください。
- ZIP エクスポート (ツール Seory Posts to Markdown):
-
カスタム投稿タイプに対応していますか ?
-
はい。公開 (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 として返すこともリンクを解析することもありません。
評価
このプラグインにはレビューがありません。
貢献者と開発者
変更履歴
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
- 初回リリース。

