EmDash は WordPress およびその他のプラットフォームからコンテンツをインポートします。各インポートソースはプラットフォームを検出し、コンテンツを分析してサイトに取得します。
インポートソース
| ソース ID | プラットフォーム | プローブ | OAuth | フルインポート |
|---|---|---|---|---|
wxr | WordPress エクスポートファイル | いいえ | いいえ | はい |
wordpress-com | WordPress.com | はい | はい | はい |
wordpress-rest | セルフホスト WordPress | はい | いいえ | プローブのみ |
WXR ファイルアップロード
最も完全なインポート方法。WordPress eXtended RSS (WXR) エクスポートファイルを管理ダッシュボードに直接アップロードします。
機能:
- すべての投稿タイプ(カスタムを含む)
- すべてのメタフィールド
- 下書きと非公開投稿
- 完全な分類階層
- メディア添付ファイルのメタデータ
WXR ファイルの取得方法:
- WordPress 管理画面で、ツール → エクスポートに移動
- すべてのコンテンツまたは特定の投稿タイプを選択
- エクスポートファイルをダウンロードをクリック
.xmlファイルを EmDash にアップロード
WordPress.com OAuth
WordPress.com にホストされているサイトの場合、OAuth 経由で接続して手動ファイルエクスポートなしでインポートします。
- WordPress.com サイトの URL を入力
- WordPress.com で接続をクリック
- WordPress.com ポップアップで EmDash を承認
- インポートするコンテンツを選択
含まれるもの:
- 公開済みおよび下書きコンテンツ
- 非公開投稿(承認が必要)
- API 経由のメディアファイル
- REST API に公開されたカスタムフィールド
WordPress REST API プローブ
URL を入力すると、EmDash はサイトをプローブして WordPress を検出し、利用可能なコンテンツを表示します:
検出: WordPress 6.4
├── 投稿: 127(公開済み)
├── ページ: 12(公開済み)
└── メディア: 89 ファイル
注意: 下書きと非公開コンテンツには認証
または完全な WXR エクスポートが必要です。
REST プローブは情報提供のみです。完全なインポートには、WXR ファイルのアップロードまたは OAuth 経由の接続(WordPress.com の場合)を提案します。
インポートフロー
すべてのソースは同じフローに従います:
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 接続 │────▶│ 分析 │────▶│ 準備 │────▶│ 実行 │
│ (プローブ/ │ │ (スキーマ │ │ (作成 │ │ (インポート│
│ アップロード)│ │ チェック) │ │ スキーマ) │ │ コンテンツ)│
└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘
ステップ 1: 接続
URL を入力してプローブするか、ファイルを直接アップロードします。
URL プローブは、登録されているすべてのソースを並列で実行します。最も信頼度の高い一致が、提案される次のアクションを決定します:
- WordPress.com サイト → OAuth 接続を提供
- セルフホスト WordPress → エクスポート手順を表示
- 不明 → ファイルアップロードを提案
ステップ 2: 分析
ソースはコンテンツを解析し、スキーマの互換性をチェックします:
投稿タイプ:
├── post (127) → posts [新しいコレクション]
├── page (12) → pages [既存、互換性あり]
├── product (45) → products [3 フィールドを追加]
└── revision (234) → [スキップ - 内部タイプ]
必要なスキーマ変更:
├── コレクションを作成: posts
├── pages にフィールドを追加: featured_image
└── コレクションを作成: products
各投稿タイプはそのステータスを表示します:
| ステータス | 意味 |
|---|---|
| 準備完了 | コレクションが存在し、フィールドが互換性あり |
| 新しいコレクション | 自動的に作成されます |
| フィールドを追加 | コレクションが存在し、欠けているフィールドが追加されます |
| 互換性なし | フィールドタイプの競合(手動修正が必要) |
ステップ 3: スキーマの準備
スキーマを作成してインポートをクリックして:
- 新しいコレクションを作成
- 正しい列タイプで欠けているフィールドを追加
- インデックス付きのコンテンツテーブルを設定
ステップ 4: インポートの実行
コンテンツは順次インポートされます:
- Gutenberg/HTML が Portable Text に変換
- WordPress ステータスが EmDash ステータスにマッピング
- WordPress 作成者が所有権(
authorId)とプレゼンテーション署名にマッピング - 分類が作成されリンク
- 再利用可能ブロック(
wp_block)がセクションとしてインポート - 進行状況がリアルタイムで表示
作成者インポートの動作:
- 作成者マッピングが EmDash ユーザーを指している場合、所有権はそのユーザーに設定され、同じユーザーのリンクされた署名が作成/再利用されます。
- ユーザーマッピングがない場合、WordPress 作成者 ID からゲスト署名が作成/再利用されます。
- インポートされたエントリは順序付き署名クレジットを取得し、最初のクレジットが
primaryBylineIdとして設定されます。
ステップ 5: メディアインポート(オプション)
コンテンツの後、オプションでメディアをインポート:
-
分析 — タイプ別に添付ファイル数を表示
見つかったメディア: ├── 画像: 75 ファイル ├── ビデオ: 10 ファイル └── その他: 4 ファイル -
ダウンロード — WordPress URL からストリーミングし、進行状況を表示
メディアをインポート中... ├── 45 / 89 (50%) ├── 現在: vacation-photo.jpg └── ステータス: アップロード中 -
URL の書き換え — コンテンツが新しい URL に自動的に更新
メディアインポートはコンテンツハッシュ(xxHash64)を使用して重複排除を行います。複数の投稿で使用される同じ画像は一度だけ保存されます。
API エンドポイント
インポートシステムは次のエンドポイントを公開します:
URL のプローブ
プローブリクエストで URL の背後にあるプラットフォームを検出:
POST /_emdash/api/import/probe
Content-Type: application/json
{ "url": "https://example.com" }
レスポンスには検出されたプラットフォームと提案されたアクションが含まれます。
WXR の分析
WXR ファイルをアップロードして投稿タイプとスキーマの互換性を分析:
POST /_emdash/api/import/wordpress/analyze
Content-Type: multipart/form-data
file: [WordPress export .xml]
レスポンスには投稿タイプ分析とスキーマの互換性が含まれます。
スキーマの準備
選択した投稿タイプのコレクションとフィールドを作成:
POST /_emdash/api/import/wordpress/prepare
Content-Type: application/json
{
"postTypes": [
{ "name": "post", "collection": "posts", "enabled": true }
]
}
インポートの実行
マッピングされたコレクションにコンテンツをインポート:
POST /_emdash/api/import/wordpress/execute
Content-Type: multipart/form-data
file: [WordPress export .xml]
config: { "postTypeMappings": { "post": { "collection": "posts" } } }
メディアのインポート
インポートで参照されるメディア添付ファイルをダウンロードして保存:
POST /_emdash/api/import/wordpress/media
Content-Type: application/json
{
"attachments": [{ "id": 123, "url": "https://..." }],
"stream": true
}
レスポンスはダウンロードとアップロード中に NDJSON 進行状況更新をストリーミングします。
URL の書き換え
インポートされたコンテンツ内の古いメディア URL を保存された同等物に置き換え:
POST /_emdash/api/import/wordpress/rewrite-urls
Content-Type: application/json
{
"urlMap": { "https://old.com/image.jpg": "/_emdash/media/abc123" }
}
エラー処理
回復可能なエラー
- ネットワークタイムアウト — バックオフで再試行
- 単一アイテムの解析失敗 — ログに記録、スキップ、インポート続行
- メディアダウンロード失敗 — 手動処理用にマーク
致命的なエラー
- 無効なファイル形式 — エラーメッセージでインポート停止
- データベース接続の喪失 — インポート一時停止、再開を許可
- ストレージクォータ超過 — インポート停止、使用状況を表示
エラーレポート
インポート完了後、EmDash は成功、調整、失敗の概要を表示します:
インポート完了
✓ 125 件の投稿をインポート
✓ 12 件のページをインポート
✓ 85 件のメディア参照を記録
⚠ 2 件のアイテムに警告:
- 投稿「特殊文字 ñ」 - タイトルエンコーディング修正済み
- ページ「About」 - 重複スラッグを「about-1」に変更
✗ 1 件のアイテムが失敗:
- 投稿 ID 456 - コンテンツ解析エラー(下書きとして保存)
失敗したアイテムは下書きとして保存され、元のコンテンツはレビュー用に _importError に保存されます。
カスタムソース
組み込みソースがカバーしていないプラットフォームからインポートするには、ImportSource インターフェースを実装し、統合に登録します:
import { mySource } from "./src/import/custom-source";
export default defineConfig({
integrations: [
emdash({
import: { sources: [mySource] },
}),
],
});
インターフェース(probe、analyze、fetchContent)および正規化された出力形状は、アーキテクチャ(内部)に文書化されています。
次のステップ
- WordPress 移行 — 完全な WordPress 移行ガイド
- プラグイン移植 — WordPress プラグインを EmDash に移植