NExT Wix2WP
WP-CLI plugin to import Wix blog posts into WordPress as Gutenberg blocks
★ 0stars
0forks
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/atsushia/next-wix2wp/archive/refs/heads/main.zipWix ブログを WordPress の投稿として WP-CLI 経由でインポートするプラグインです。
機能
- Wix Blog API からブログ記事を全件取得(ページネーション対応)
--instance省略時は RSS フィードにフォールバック(最新 ~20 件)- RSS フィード URL をブログページの HTML から自動検出
- 記事タイトル・公開日・スラッグを Wix の値そのままで保存
- 本文を Gutenberg ブロック(
core/paragraph、core/heading、core/imageなど)に変換 - 画像を WordPress メディアライブラリに登録(投稿日の年/月フォルダ)
- カテゴリーをブログページの HTML から自動抽出して WordPress カテゴリーに変換・紐付け
- 重複インポート防止(
_wix_post_idメタで照合) - ドライラン・強制上書き・画像スキップなどのオプション
動作環境
| 項目 | 要件 |
|---|---|
| WordPress | 6.0 以上 |
| PHP | 7.4 以上 |
| WP-CLI | 2.0 以上 |
インストール
- プラグインフォルダを
wp-content/plugins/NExT-Wix2WP/に配置 - WordPress 管理画面または WP-CLI でプラグインを有効化
wp plugin activate NExT-Wix2WP
使い方
instance トークンの取得
全記事を取得するには Wix の instance トークンが必要です。
自動取得を試みる(HTML から抽出):
wp wix2wp token --wix-url=https://example.com/blog-1
自動抽出できない場合は、ブラウザの DevTools から手動取得します。
手動取得手順:
- Chrome で Wix ブログページを開く
- F12 で DevTools → Network タブを開く
- ページをリロード(Ctrl+R / Cmd+R)
- Filter に
post-feed-pageと入力 - 表示されたリクエストをクリック → Headers タブ
- Request Headers 内の
Authorization: XXXXXのXXXXX部分をコピー
import コマンド
wp wix2wp import --wix-url=<WixブログURL> [オプション]
オプション
| オプション | デフォルト | 説明 |
|---|---|---|
--wix-url=<url> |
(必須) | Wix ブログの URL |
--instance=<token> |
(空) | instance トークン。省略時は RSS フィードにフォールバック(最新 ~20 件のみ) |
--limit=<number> |
0(全件) |
最大インポート件数 |
--dry-run |
false | 実行せず処理内容を表示のみ |
--force |
false | インポート済み記事を上書き更新 |
--skip-images |
false | 画像インポートをスキップ |
--post-status=<status> |
publish |
投稿ステータス(publish / draft / private) |
--author=<user_id> |
1 |
投稿者のユーザー ID |
実行例
# RSS フィードで最新記事をインポート(instance 不要)
wp wix2wp import --wix-url=https://example.com/blog-1
# instance トークンを指定して全記事をインポート
wp wix2wp import --wix-url=https://example.com/blog-1 --instance=XXXXX
# 最初の 5 件だけドライランで確認
wp wix2wp import --wix-url=https://example.com/blog-1 --instance=XXXXX --limit=5 --dry-run
# 画像をスキップして下書きでインポート
wp wix2wp import --wix-url=https://example.com/blog-1 --instance=XXXXX --skip-images --post-status=draft
# インポート済みの記事を強制上書き
wp wix2wp import --wix-url=https://example.com/blog-1 --instance=XXXXX --force
# 詳細ログを表示しながら実行
wp wix2wp import --wix-url=https://example.com/blog-1 --instance=XXXXX --debug
実行例(出力)
内部 API モード: instance トークンを使用します。
記事を取得しています...
275 件の記事が見つかりました。
インポート中: 100% (275/275) [============================] 0:04:30
===== インポート完了 =====
インポート: 273
更新: 0
スキップ: 2
エラー: 0
Success: すべての処理が完了しました。
token コマンド
Wix ブログページの HTML から instance トークンの自動抽出を試みます。
wp wix2wp token --wix-url=https://example.com/blog-1
抽出に成功すると、そのまま使えるインポートコマンドを表示します。 失敗した場合は DevTools を使った手動取得手順を表示します。
保存されるデータ
投稿メタ
| メタキー | 内容 |
|---|---|
_wix_post_id |
Wix の記事 ID(重複チェック・再インポート用) |
_wix_source_url |
Wix の記事スラッグ(元 URL 確認用) |
カテゴリーメタ(タームメタ)
| メタキー | 内容 |
|---|---|
_wix_category_id |
Wix のカテゴリー ID(重複チェック用) |
メディアメタ
| メタキー | 内容 |
|---|---|
_wix_original_url |
Wix の元画像 URL(重複インポート防止用) |
ファイル構成
NExT-Wix2WP/
├── NExT-Wix2WP.php # プラグインエントリーポイント
├── includes/
│ ├── class-wix-api.php # Wix Blog API / RSS クライアント
│ ├── class-image.php # 画像ダウンロード・メディア登録
│ ├── class-converter.php # Rich Content → Gutenberg ブロック変換
│ └── class-importer.php # 投稿インポート処理(カテゴリー・日付含む)
├── cli/
│ └── class-cli-command.php # WP-CLI コマンド定義
├── README.md
└── SPEC.md # 仕様書
技術仕様
使用 API
| モード | エンドポイント | 認証 |
|---|---|---|
| 内部 API | /_api/blog-frontend-adapter-public/v2/post-feed-page |
Authorization: <instance_token> |
| RSS フォールバック | <link rel="alternate" type="application/rss+xml"> で自動検出 |
不要 |
instance トークンの形式
<ランダム文字列>.<JWT>
例: 712eKAML...yAA.eyJpbnN0...
ブラウザの DevTools → Network タブで post-feed-page のリクエストヘッダー Authorization の値をそのままコピーします。
注意事項
- Wix 内部 API:
/_api/blog-frontend-adapter-public/v2/post-feed-pageは Wix の非公式 API です。Wix のプラットフォーム更新により仕様が変わる可能性があります。 - 大量インポート: 記事数が多い場合は
--limit=10などで少量テストしてから全件実行することを推奨します。 - レート制限: 各ページリクエスト間に 200ms のインターバルを設けています。
- 再実行: 一度インポートした記事は
_wix_post_idメタで管理されるため、再実行しても重複しません。上書きが必要な場合は--forceを使用してください。 - RSS フォールバック:
--instanceを省略した場合は RSS フィードから最新 ~20 件のみ取得します。全件インポートには--instanceが必要です。
開発者向け
セットアップ
composer install # phpcs / phpunit など開発依存をインストール
npm install # husky / lint-staged(コミット前 phpcs チェック)
ローカルでの実行は PHP 8.3 / 8.4 を想定しています。
コーディング規約(phpcs)
composer run phpcs # WordPress コーディング規約チェック
composer run phpcbf # 自動修正
テスト(phpunit)
# ユニットテスト(WordPress 非依存・Brain Monkey)
composer run test:unit
# 統合テスト(WordPress テストスイートが必要)
bash bin/install-wp-tests.sh wordpress_test root root 127.0.0.1 latest
composer run test:integration
CI / リリース
.github/workflows/ci.yml— push / PR で phpcs・phpunit(WP 最新+6.8 × PHP 8.3/8.4 のマトリクス)・Plugin Check を実行.github/workflows/release.yml—1.0.0形式のタグ push で配布 zip を生成し GitHub Release に添付
# リリース例
git tag 1.0.1
git push origin 1.0.1
ライセンス
GPL-2.0-or-later