WP Manifestindependent plugin directory
manifest / editor / next-block-transporter

NExT Block Transporter WP Registry grade B. Medium-severity findings · 1 findingWP RegistryMedium-severity findings · 1 findingOpen the reportB

Gutenbergのブロックを画像込みでパッケージ化してエクスポートし、別サイトへインポート(メディア再アップロード・パス修正・ブロック復元)できるようにするプラグイン。

★ 2stars
15release downloads
0.4.0latest · 20d ago

Install

Download next-block-transporter-0.4.0.zip From the 0.4.0 release on GitHub, Oct 2, 2026

Upload it under Plugins → Add New Plugin → Upload Plugin, then activate.

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/atsushia/next-block-transporter/releases/download/0.4.0/next-block-transporter-0.4.0.zip
No built-in updater. New versions won't appear under Dashboard → Updates. Install new releases yourself, or let Git Updater track the repository.

日本語 | English

Gutenbergのブロックを画像込みでパッケージ化し、別サイトへ持ち運べるようにするWordPressプラグイン。

概要

Gutenberg編集画面でブロックをコピー&ペーストすると、画像がパスのみ含まれ実体が伴わないため、 別サイトへ貼り付けた際に画像が表示されない問題があります。

本プラグインは、Illustratorの「パッケージ」機能のように、選択したブロックのマークアップと 参照画像の実体をひとつのZIPファイル(manifest.json + media/)にまとめてエクスポートします。

受け入れ側サイトでは、そのパッケージファイルをアップロードするだけで:

  1. 画像をメディアライブラリへ再アップロード
  2. ブロックマークアップ内の画像URL・attachment IDを新しいものに修正
  3. ブロックを編集中の投稿へ復元

という一連の処理を自動で行います。

動作要件

項目 要件
WordPress 6.4以上(動作確認: 6.7)
PHP 7.4以上

インストール

  1. プラグインファイルを wp-content/plugins/next-block-transporter に配置
  2. 管理画面の「プラグイン」からNExT Block Transporterを有効化
  3. 投稿編集画面の右上メニュー、または追加されたサイドバーから利用

使い方

エクスポート(コピー元サイト)

  1. 投稿編集画面で持ち運びたいブロックを選択
  2. サイドバー「NExT Block Transporter」の「選択ブロックをエクスポート」をクリック
  3. パッケージファイル(ZIP)がダウンロードされる

インポート(受け入れ側サイト)

  1. 投稿編集画面でサイドバー「NExT Block Transporter」を開く
  2. 「インポート」パネルでパッケージファイル(.zip / .nxbt)を選択
  3. 画像がメディアライブラリへ再登録され、ブロックが編集中の投稿へ挿入される

仕様

パッケージ形式・REST API・内部処理の詳細は SPEC.md を参照してください。

開発

コーディング規約はWordPress Coding Standardsに準拠しています。 設定は phpcs.xml.dist を参照してください。

composer install
composer run phpcs

PHPUnitテストの実行

WordPressコアのテストスイート(wp-phpunit/wp-phpunit)をComposer経由で利用する構成のため、 別途 wp-env(Docker)や svn は不要です。以下だけで動作します。

  1. テスト用のMySQLデータベースを用意する(既存のDBとは別の空データベースを1つ作成するだけでよい)。
  2. 以下の環境変数でDB接続情報を指定して vendor/bin/phpunit(または composer run phpunit)を実行する。
composer install
WP_TESTS_DB_NAME=nbt_phpunit_test \
WP_TESTS_DB_USER=root \
WP_TESTS_DB_PASSWORD=root \
WP_TESTS_DB_HOST=127.0.0.1 \
composer run phpunit
環境変数 説明 省略時のデフォルト
WP_TESTS_DB_NAME テスト用データベース名 nbt_phpunit_test
WP_TESTS_DB_USER DBユーザー root
WP_TESTS_DB_PASSWORD DBパスワード root
WP_TESTS_DB_HOST DBホスト(host:port や host:/path/to/socket.sock 形式も可) 127.0.0.1
WP_TESTS_ABSPATH テストで読み込むWordPress本体のパス(ABSPATH) 本プラグイン自身のパスから相対的に自動算出(wp-content/plugins/配下で開発している前提)

Local(Local by Flywheel)等、既に動くWordPress環境の中でこのプラグインを開発している場合は、 WP_TESTS_ABSPATH を指定しなくても自動的にそのWordPress本体を利用します。 CIでは WP_TESTS_ABSPATH で別途ダウンロードしたWordPress本体を指定しています(.github/workflows/ci.yml 参照)。

ライセンス

GPLv2 or later

Changelog

0.4.0

  • [ 機能追加 ] 同一サイト系統間(ステージング→本番など)のインポートで、添付ファイルID・オリジナル画像のファイル名が一致する既存メディアを採用し、メディアライブラリへの重複登録を防止
  • [ 機能追加 ] インポート完了メッセージに既存メディアを再利用した件数の内訳を表示

0.3.0

  • [ 不具合修正 ] 遅い/リソース制限の厳しいサーバーで、メディア点数が多い・容量が大きいパッケージのインポートがタイムアウトして失敗する不具合を修正

0.2.0

  • [ 機能追加 ] gallery / cover / media-text ブロックの入れ子・背景画像も再帰的に収集
  • [ 機能追加 ] 取り込んだメディアに元のファイル名を引き継ぎ
  • [ 仕様変更 ] エクスポート対象を縮小版ではなくオリジナル画像に変更し、解像度はブロックの設定で指定
  • [ 不具合修正 ] 選択ブロックをエクスポートできない不具合を修正
  • [ セキュリティ修正 ] パストラバーサル・zip-slip・拡張子偽装への対策と一時ファイルの保護を追加
  • [ その他 ] プラグイン削除時に一時ファイル・cron を除去するアンインストール処理を追加

0.1.0

  • 初期スケルトン作成

Releases

3 releases. Each count is every asset in that release; expand a row for the breakdown.

Tag
Published
Assets
Downloads
0.4.0 latest
Oct 2, 2026 20d ago
next-block-transporter-0.4.0.zip
7
Jul 26, 2026 2mo ago
next-block-transporter-0.3.0.zip
6
Jul 12, 2026 3mo ago
next-block-transporter-0.2.0.zip
2
B grade

Security

NExT Block Transporter 0.4.0 · audited by WP Registry

Medium-severity findings.

1 medium
Audited release
0.4.0
Findings
1
Worst severity
medium
Content hash
1fba710ba15f0665e8d48efc…

Findings

  • medium Contributor-level import extracts arbitrary ZIP contents (incl. .php) into web-accessible uploads

    file_access

    All REST routes (export, import start/next/finish) use permission_check() = current_user_can('edit_posts'), so Contributors can submit an import package. start_session() validates only path traversal/size, then ZipArchive::extractTo() into wp-content/uploads/nbt-tmp/extract-<session_id>/ with no extension allowlist, and returns session_id to the caller. Script execution there is blocked only by a generated .htaccess (Apache); on hosts that execute PHP under uploads without honoring .htaccess this becomes code execution by a Contributor. process_next() also creates media attachments for users lacking upload_files.

    includes/class-nbt-rest-controller.php; includes/class-nbt-import.php:89-91; 51-117, 369-410

    Recommendation

    Require upload_files (ideally manage_options for import), extract only manifest.json and allowlisted media extensions, and stage extraction outside the web root.

WP Registry hashes the installable build and reports on that exact bytes-for-bytes copy. Embargoed findings are withheld until they are disclosed, so a clean verdict means nothing public is outstanding. WP Manifest does not audit code itself.