説明
WP Branches For Post は、WordPress に Git のような編集ワークフローを追加します。
公開済みの固定ページや投稿に大きな編集が必要でも、公開中の内容を直接変更する必要はありません。非公開の作業用ブランチを作成し、通常の WordPress エディターで編集し、差分を確認して、準備ができたときだけマージできます。ワークフロー全体を通して、公開中の元の投稿は投稿 ID、URL、公開識別情報を保持します。
バージョン 2.1 では三方向マージ確認を追加しました。プラグインはブランチ作成時の元の状態を記録し、現在の元の投稿と現在のブランチを比較して、非競合の作業と実際の競合を分離し、新しい変更を黙って上書きせずに更新やマージを行えるよう支援します。
ワークフローの概要
- 公開済み、非公開、予約済みの投稿・固定ページ、または対応しているカスタム投稿タイプを開きます。
- 投稿ブランチパネルを開き、「ブランチを作成」を選択します。
- WordPress が分離された下書きブランチを開きます。公開中の元の投稿は変更されません。
- 通常どおりブランチを編集します。必要なときはいつでもブランチをプレビューできます。
- 「変更を確認」を選択します。
- ブランチの変更、元の投稿の新しい変更、競合、識別情報の変更を確認します。
- 元の投稿に新しい非競合の編集があり、それをブランチへ取り込んでから続けたい場合は、「元の投稿からブランチを更新」を選択します。
- 確認結果に問題がなければ、「保存して元の投稿へマージ」を選択します。
- 両方で同じ値が異なる内容に変更されている場合は競合を確認し、一覧に表示された競合で意図的にブランチ側の値を採用したい場合にだけ強制マージを使用します。
- マージに成功すると、元の投稿はそのまま公開中の投稿として残り、作業用ブランチはゴミ箱へ移動されます。
スクリーンショット付き機能ガイド
プラグインページのスクリーンショットは以下で説明するものと同じワークフローに沿っているため、使用前に各操作がどのように表示されるか確認できます。
- スクリーンショット 1 — 安全に開始: 元の投稿で投稿ブランチパネルを開き、「ブランチを作成」を選択します。公開中の投稿は編集されません。
- スクリーンショット 2 — 分離して作業: ブランチエディターには、元の投稿との関係、プレビューリンク、確認状態、そのブランチで利用できる操作が表示されます。
- スクリーンショット 3 — マージ前に確認: 「変更を確認」を開くと三方向比較が表示され、基準、現在の元の投稿、ブランチの値を並べて確認できます。
- スクリーンショット 4 — 安全な上流変更を取り込む: 元の投稿に新しい非競合の変更があると、「元の投稿からブランチを更新」が利用可能になります。
- スクリーンショット 5 — 更新後も続行: 元の投稿からブランチを更新すると、リベース済みの状態と新しいマージ確認でエディターが再読み込みされます。
- スクリーンショット 6 — 実際の競合で停止: 元の投稿とブランチの両方が同じマージ対象値を異なる内容に変更すると、通常のマージはブロックされ、競合するパスが表示されます。
- スクリーンショット 7 — 確認後にのみ強制: 強制マージには別の破壊的操作の確認があり、確認済みの競合に対してのみブランチ側の値を優先します。
- スクリーンショット 8 — 古い確認を拒否: 確認後にブランチまたは元の投稿が変更された場合、マージは停止され、現在の状態をもう一度確認する必要があります。
- スクリーンショット 9 — 明示的に破棄: ブランチを放棄するには確認が必要で、ブランチだけがゴミ箱へ移動されます。公開中の元の投稿は変更されません。
- スクリーンショット 10 — 元の投稿から進行中の作業を確認: 元の投稿には既存のブランチと現在の確認状態が一覧表示されます。
- スクリーンショット 11 — 通常の WordPress ナビゲーションを維持: 投稿一覧からもブランチ状態とクイック操作を利用できます。
- スクリーンショット 12 — 同期パターンの影響範囲を理解: 同期パターンを参照するブランチには警告が表示されます。同期パターン自体の編集は WordPress 全体に影響するためです。
投稿ブランチパネルで確認できること
元の投稿では、パネルにブランチを作成できるかどうかが表示され、編集可能な有効ブランチが一覧表示されます。
ブランチでは、パネルに次の内容が表示されます。
- 元の投稿へ戻るリンク。
- ブランチと元の投稿のプレビューリンク。
- ブランチの作成者。
- 現在の確認状態。
- 検出されたブランチ変更と競合の件数。
- 「変更を確認」で詳細なマージ確認を開きます。
- 元の投稿の新しい変更を安全にブランチへ取り込める場合は、「元の投稿からブランチを更新」を使用します。
- ブランチを通常どおりマージできる場合は、「保存して元の投稿へマージ」を使用します。
- 確認済みの競合に対する明示的な強制マージ手順。
- 作業用ブランチを放棄する場合は、「ブランチを破棄」を使用します。
確認状態を理解する
- クリーン: 通常のマージを妨げる互換性のない新しい変更はありません。
- 更新可能: 元の投稿に新しい非競合の作業があります。プラグインはブランチ独自の編集を保持したまま、ブランチを更新できます。
- 情報: 元の投稿で、スラッグや公開識別情報など、ブランチから上書きできない識別関連データが変更されています。
- 競合: 元の投稿とブランチが同じマージ対象データを異なる内容に変更しています。状況を確認するまで通常のマージはブロックされます。
- 旧形式/不明: 古いブランチには、正確な三方向確認に必要な完全な 2.1 基準がありません。強制マージする前に手動で確認してください。
- 欠落: 元の投稿を安全に特定できなくなったため、マージは利用できません。
マージ確認に含まれる内容
確認では変更を 4 つのグループに分けます。
- ブランチの変更: 作業用ブランチで変更されたマージ対象の値。
- ブランチ作成後の元の投稿の変更: 元の投稿へ直接加えられた新しい変更。
- 競合: 両側で異なる内容に変更されたパス。
- マージで保持される元の投稿の識別情報の変更: プラグインが意図的に上書きしない変更。
確認対象のフィールドでは、項目が一覧に含まれた理由を理解できるよう、基準、現在の元の投稿、ブランチの値もパネルに表示されます。
同期される内容
マージに成功すると、通常の編集コンテンツ、対応する投稿メタデータ、タクソノミーを同期できます。
プラグインは元の投稿の識別情報と公開状態を意図的に保持します。特に、マージで元の投稿 ID、GUID、スラッグ、投稿者、公開日時を置き換えることはありません。階層型コンテンツでは、公開 URL が変わる可能性があるため、ブランチから元の親子関係を変更できません。
本文やアイキャッチ画像のメタデータですでに参照されているメディア ID は引き続き利用できます。添付ファイルの親は変更されません。
他の人が元の投稿を変更している間の編集
バージョン 2.1 では、ブランチ作成時に記録した基準を使って 3 つの状況を区別します。
- ブランチだけが値を変更した場合: ブランチ側の値を適用できます。
- 元の投稿だけが値を変更した場合: 元の投稿の新しい値が保持されます。
- 両方が同じ値を異なる内容に変更した場合: その値は競合となり、通常のマージはブロックされます。
そのため、ブランチ作成後に元の投稿が変更されても、安全にマージできる場合が多くあります。
元の投稿からブランチを更新
元の投稿に新しい非競合の変更がある場合、「元の投稿からブランチを更新」で作業用ブランチを新しい元の状態へリベースします。
ブランチだけの作業は保持され、元の投稿だけの作業はブランチへ取り込まれ、新しい基準が記録されます。操作を安全に完了できない場合、部分的に更新された状態を残すのではなく、プラグインはブランチを以前の状態へ戻そうとします。
強制マージ
強制マージは意図的に既定の手順にはしていません。
強制マージは、競合が検出され確認された後にのみ提供されます。一覧にあるマージ競合ではブランチ側の値を優先しますが、元の投稿上の新しい非競合の作業は引き続き保持されます。
拡張機能では、プラグインの権限/フィルター境界を通じて、強制マージを許可するユーザーをさらに制限できます。
同期パターン
WordPress の同期パターンはグローバルなコンテンツです。同期パターン自体を編集すると、そのパターンが使われているすべての場所が変更され、投稿ブランチ内には隔離されません。
ブランチが同期パターンを参照している場合、グローバルなパターン編集をブランチ内の編集と誤認しないよう、WP Branches For Post はブランチパネルに警告を表示します。
安全性と障害時の処理
- ブランチは非公開のまま維持され、通常の WordPress 公開操作は下書きへ戻されます。
- 変更を伴う操作では、サービス層でも WordPress の権限チェックを繰り返します。
- ブラウザー操作と REST ルートでは、適切な nonce/権限保護を使用します。
- 2.1 で作成されたすべてのブランチは、三方向確認用の完全な基準スナップショットを保存します。
- 通常のマージは未解決の競合を拒否します。
- マージとリベース操作では同期状態を検証し、古くなった確認済みデータを拒否し、書き込み失敗後にはロールバックを試みます。
- マージ後にブランチの後処理を完了できない場合、部分的な成功として扱わず、元の投稿を復元します。
- マージに成功したブランチと破棄したブランチは完全削除せず、ゴミ箱へ移動されます。
- 元の投稿が更新されると、WordPress は通常どおりリビジョン履歴を作成します。
- このプラグインは SQL でリビジョンや添付ファイルの親を直接書き換えません。
ブロックエディター、クラシックエディター、一覧画面
完全な確認機能は、ブロックエディターのドキュメントサイドバーで利用できます。
クラシックエディター、投稿一覧の行アクション、管理バーにも、ブランチの作成/オープンや対応するブランチ操作のための互換コントロールが残されています。競合を最も分かりやすく確認するには、ブロックエディターのパネルを使用してください。
ブランチ操作のトラブルシューティング
操作を利用できない、またはプラグインがマージを停止した場合、それは通常、隠し設定ではなく安全確認によるものです。
- 元の投稿に未保存のブロックエディター変更がある間は、「ブランチを作成」が無効になります。まずその編集を保存または破棄し、ブランチの基準が保存済みの元の投稿と一致するようにしてください。
- 「ブランチを作成」は、公開済み・非公開・予約済みなど対応する保存済みステータスで、かつ現在の WordPress 権限で操作が許可されている場合にのみ利用できます。
- 「元の投稿からブランチを更新」は、元の投稿にブランチと競合しない新しい変更がある場合にのみ表示されます。毎回のマージ前に実行する必要はありません。
- 未解決の本当の競合がある場合、「保存して元の投稿へマージ」は表示されません。まず「変更を確認」を開き、一覧のパスを確認してください。
- 確認後にブランチまたは元の投稿が変更された場合、マージは停止され、確認内容が更新されます。もう一度試す前に現在の状態を確認してください。
- 強制マージは、競合または旧形式の状態に対して明示的な確認が必要な場合で、かつアカウントに強制マージ権限がある場合にのみ表示されます。
- 元の投稿が欠落している、またはブランチと投稿タイプが一致しなくなった場合、マージは利用できません。
- ブロックエディターでは完全な三方向確認を利用できます。クラシックエディターと一覧画面にも互換操作は残りますが、競合が多い作業はブロックエディターで確認するのが最も分かりやすくなります。
旧バージョンで作成したブランチとの互換性
旧バージョンのプラグインで作成したブランチも引き続き認識されます。
互換性のある保存済み基準ハッシュを持つ 2.0 形式のブランチは、元の投稿が変更されていなければ通常どおりマージできます。完全な 2.1 スナップショットを持たない古いブランチでは詳細な三方向比較を表示できないため、プラグインは保守的に扱い、状態が不確かな場合は明示的な確認を求めます。
開発者向け
利用できる主なフィルターとアクション:
wbfp_branchable_post_statuseswbfp_create_branch_post_datawbfp_excluded_meta_keyswbfp_mergeable_post_fieldswbfp_can_force_mergewbfp_branch_createdwbfp_before_mergewbfp_after_merge
拡張フィルターの実行後も、セキュリティ上重要な不変条件は引き続き強制されます。ブランチは同じ投稿タイプの下書きのまま、保護されたランタイムメタデータは除外されたまま、マージ可能なコアフィールドはプラグインの許可リスト内に保たれ、強制マージも引き続きプラグインの認可境界を通過します。
データフローについては ARCHITECTURE.md、認可と同期の境界については SECURITY.md、2.1 で使用した再現可能な完全検証環境については TESTING.md を参照してください。
ブロックエディターのソースは src/index.js にあり、@wordpress/scripts でビルドされます。
読みやすいソースコードとビルドツールは https://github.com/hsxk/WP-Branches-For-Post/ で管理しています。
スクリーンショット












インストール
- WordPress の「プラグイン」画面から WP Branches For Post をインストールするか、
/wp-content/plugins/wp-branches-for-postへアップロードします。 - プラグインを有効化します。
- 既存の公開済み、非公開、または予約済みの投稿/固定ページをエディターで開きます。
- エディター設定サイドバーで投稿ブランチパネルを開きます。
- 「ブランチを作成」を選択して、安全な作業用コピーを開始します。
通常のワークフローでは、別の設定ページは必要ありません。
FAQ
-
ブランチは公開されますか?
-
いいえ。ブランチは分離された作業用下書きです。通常の WordPress 公開操作を行っても下書きへ戻されます。作業の準備ができたら、プラグインのマージ操作を使用してください。
-
マージすると元の URL や投稿 ID は変わりますか?
-
いいえ。既存の元の投稿がそのまま公開リソースとして残ります。投稿 ID と識別情報は保持され、スラッグ、投稿者、公開日時など識別関連の値がブランチから取得されることはありません。
-
作業中に誰かが元の投稿を編集した場合はどうなりますか?
-
プラグインは、元の投稿、ブランチ、保存済みの基準を比較します。元の投稿だけの作業は保持でき、非競合の作業はリベースでき、重複して異なる編集は黙って上書きされる代わりに競合として報告されます。
-
毎回のマージ前にブランチを更新する必要がありますか?
-
いいえ。元の投稿の新しい変更がブランチと競合しない場合、三方向マージでそれらを保持できます。最新の元の状態を土台に編集を続けたい場合は、先にブランチを更新すると便利です。
-
強制マージでは何が上書きされますか?
-
明示的に確認した競合では、強制マージはブランチ側の値を優先します。ブランチと競合しない元の投稿の新しい作業は引き続き保持されます。
-
マージ前にブランチをプレビューできますか?
-
はい。ブランチパネルにはブランチのプレビューリンクと現在の元の投稿へのリンクがあり、エディターの外でも比較できます。
-
ブランチを破棄するとどうなりますか?
-
ブランチはゴミ箱へ移動されます。元の投稿は変更されません。
-
マージに成功するとどうなりますか?
-
元の投稿は識別情報を保持したまま WordPress 経由で更新され、マージ済みブランチはゴミ箱へ移動されます。
-
対応しているタクソノミーはブランチワークフローの一部として同期されます。確認済みのブランチ状態が空の場合は、そのタクソノミーをクリアすることも含まれます。
-
投稿メタデータも含まれますか?
-
対応している投稿メタデータが同期されます。ランタイム/プラグイン管理用キーは除外され、拡張機能は独自の除外項目を追加できます。
-
アイキャッチ画像はどうなりますか?
-
アイキャッチ画像のメタデータは通常の同期対象メタデータに含まれます。参照されるメディア項目は既存の添付ファイルとしての識別情報を保持します。
-
同期パターンはブランチ内に隔離されますか?
-
いいえ。同期パターンは WordPress 全体で共有されるエンティティです。プラグインは参照を検出して警告しますが、同期パターン自体を編集すると、そのパターンが使われているすべての場所に影響します。
-
カスタム投稿タイプに対応していますか?
-
はい。投稿タイプが通常の WordPress 編集 API を使用し、現在のユーザーに必要な権限がある場合に対応します。
-
旧バージョンのプラグインで作成したブランチも使用できますか?
-
はい。互換処理は残されていますが、古いブランチには詳細な三方向確認に必要な完全な 2.1 基準がない場合があるため、より保守的に処理されます。
評価
このプラグインにはレビューがありません。
貢献者と開発者
変更履歴
2.1.1
- マージレビューを改善し、メニュー順、コメント受付状態、ピンバック/トラックバック受付状態、パスワード状態について、読みやすい「基準 / 元の投稿 / ブランチ」の値を表示するようにしました。
- 三方向レビューで、読みやすいタクソノミーターム名と、サムネイルプレビュー付きのアイキャッチ画像情報を表示するようにしました。
- REST のレビューペイロードでは、投稿パスワードをマスクしたままにし、任意のカスタムメタ値を公開しないようにしました。
- 「既存のブランチ」カードを拡張し、ブランチ ID、作成者、更新日時、状態、変更数、競合数を表示するようにしました。
- 投稿および固定ページの一覧テーブルに専用の「既存のブランチ」ビューを追加し、旧形式のブランチ関連付けにも対応しました。
- ブランチ一覧の件数と絞り込みを WordPress の投稿者権限に合わせ、edit_others_posts 権限を持たないユーザーには自分のブランチだけが表示されるようにしました。
- 現在のユーザーが元の投稿を閲覧できない場合に、ブランチ一覧の状態表示から非公開の元投稿タイトルが漏れないようにしました。
- 読みやすい Open / Closed のレビュー値を WordPress コアの翻訳を使ってローカライズしました。
- 実際の WordPress 統合テストを 130 項目、実際の Gutenberg ブラウザテストを 42 項目まで拡充し、35 ケースのセマンティック UI/チュートリアル契約も維持しました。
- 配布用プラグインに開発用の隠しファイルが混入しないよう、リリースツリーと ZIP のクリーンアップを強化しました。
2.1.0
- 元の投稿の新しい編集をすべて同じ種類の競合として扱う代わりに、ブランチ/元の投稿/基準による三方向確認を追加しました。
- ブロックエディターのマージ確認に、詳細なブランチ変更、元の投稿の変更、正確な競合、保持される識別情報の変更を追加しました。
- 元の投稿の新しい非競合の作業に対して、安全な「元の投稿からブランチを更新」動作を追加しました。
- 元の投稿だけの変更を保持しながら、ブランチだけの変更を適用する選択的な三方向マージ動作を追加しました。
- 実際に重複する競合に対して、確認済みであることを明示する強制マージ処理を追加しました。
- マージやブランチ更新の失敗に対するロールバックと書き込み後の検証を追加しました。
- 確認状態トークンとサービス層の鮮度チェックを追加し、確認後にブランチまたは元の投稿が変更された場合はマージを拒否するようにしました。
- 「元の投稿からブランチを更新」後に Gutenberg を再読み込みし、エディターが常にリベース済みのサーバー状態を反映するようにしました。
- マージの書き込みに成功してもブランチをゴミ箱へ移動できない場合にロールバックするようにし、部分成功の状態を防止しました。
- クラシックエディターと投稿一覧の操作を 2.1 の確認状態に合わせ、安全な非競合更新では強制マージを要求しないようにしました。
- 検証済みの基準メタデータ書き込みと、ブランチ更新で新しい基準を保存できない場合のロールバックを追加しました。
- ブランチ更新の書き込み前後に古い状態のチェックを追加し、元の投稿/ブランチの同時保存があった場合は新しい確認を必須にしました。
- マージ時に階層型投稿の親を保持し、意図しない公開 URL の変更を防ぐようにしました。
- ブランチ/元の投稿のプレビューリンクと同期パターンの警告を追加しました。
- 2.1 ワークフローに対して、実際の WordPress 7.1 を使った統合テストと、実際の Gutenberg ブラウザーによるエンドツーエンドテストを追加しました。
- 完全なワークフローを説明するため、WordPress.org のドキュメントとスクリーンショットを拡充しました。
2.0.1
- 現在のブロックエディター JSX ランタイムに合わせ、対応する WordPress の最低バージョンを 6.6 に引き上げました。
- 不足していた翻訳者向けコメントを追加し、同梱のブロックエディタービルドを更新しました。
- Plugin Check と PHPCS の検証範囲を改善し、リリース用ビルドツリーを整合させました。
- WordPress.org 用アートワークを標準の .wordpress-org ディレクトリへ移動し、タグを起点とする SVN デプロイを追加しました。
- 実際の WordPress 環境を使ったセキュリティ検証をさらに追加しました。
- PR #2〜#6 を通じて、実 WordPress 環境でのセキュリティ検証、Plugin Check と PHPCS の改善、i18n 修正、WordPress.org リリースツールに貢献してくださった @miyanialkesh7 に特別な感謝を申し上げます。
2.0.0
- 現在の WordPress 向けにブランチワークフローを再構築。
- ブロックエディターのドキュメントサイドバー統合を追加。
- 権限チェックに基づくコールバックを使用する REST エンドポイントを追加。
- 基準スナップショットによる競合検出を追加。
- 公開をきっかけにしたマージを廃止し、明示的なマージ操作に変更。
- ブランチ投稿が公開状態にならないように変更。
- 複数値を持つキーと削除内容を正しく維持できるよう、投稿メタ同期を再設計。
- 空にしたタクソノミーも反映されるよう、タクソノミー同期を再設計。
- リビジョンと添付ファイルの親を直接 SQL で操作する処理を削除。
- マージ時に元の投稿 ID、URL、ステータス、投稿者、スラッグ、公開日時を保持するようにしました。
- マージ済みまたは破棄したブランチを完全削除せず、ゴミ箱へ移動するようにしました。
- バージョン 1.x で作成されたブランチ向けの互換処理を追加。
- 現代的な開発ツールと、CI による構文・ビルドチェックを追加。
1.3.0
- 開発者向けフィルターを追加し、コードを整理。
1.2.0
- ‘zh_CN、zh_TW、ja の翻訳を追加しました。
1.1.0
- 管理バーと一覧の操作、および初期のブロックエディター対応を追加。
1.0.0
- 初回リリース。
