From 2e8bb0df80d4cc84b85be2286de95e8e37ec669a Mon Sep 17 00:00:00 2001 From: AHMET BAYHAN BAYRAMOGLU <49499275+ABB65@users.noreply.github.com> Date: Fri, 2 Oct 2026 11:42:02 +0300 Subject: [PATCH 1/3] chore(release): 0.6.0 --- contentrain-bridge.php | 4 ++-- readme.txt | 7 ++++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/contentrain-bridge.php b/contentrain-bridge.php index 2f1304a..333f965 100644 --- a/contentrain-bridge.php +++ b/contentrain-bridge.php @@ -3,7 +3,7 @@ * Plugin Name: Contentrain Bridge * Plugin URI: https://github.com/Contentrain/wordpress-bridge * Description: Model and export WordPress content and interface text as Contentrain JSON/Markdown, with optional GitHub delivery. - * Version: 0.5.0 + * Version: 0.6.0 * Requires at least: 6.2 * Requires PHP: 7.4 * Author: Contentrain @@ -16,7 +16,7 @@ */ defined( 'ABSPATH' ) || exit; -define( 'CONTENTRAIN_BRIDGE_VERSION', '0.5.0' ); +define( 'CONTENTRAIN_BRIDGE_VERSION', '0.6.0' ); define( 'CONTENTRAIN_BRIDGE_FILE', __FILE__ ); foreach ( array( 'policy', 'files', 'exporter', 'menus', 'source', 'inventory', 'delta', 'seo-render', 'seo', 'redirects', 'routing', 'scanner', 'text', 'coverage', 'integrations', 'acf', 'models', 'validator', 'rawir', 'jobs', 'github', 'key', 'remote', 'admin' ) as $contentrain_bridge_class ) { diff --git a/readme.txt b/readme.txt index 0b9b3ea..cc4d198 100644 --- a/readme.txt +++ b/readme.txt @@ -4,7 +4,7 @@ Tags: export, migration, headless, astro, content Requires at least: 6.2 Tested up to: 7.1 Requires PHP: 7.4 -Stable tag: 0.5.0 +Stable tag: 0.6.0 License: GPL-2.0-or-later License URI: https://www.gnu.org/licenses/gpl-2.0.html @@ -76,6 +76,11 @@ The plugin stores export ownership and a source revision marker. It sends nothin == Changelog == += 0.6.0 = + +* Advanced Custom Fields options pages ("Site settings", footer, contact details) are exported as site-wide fields in the migration data, typed like the fields of a post. They were already in the export as their own entry; a migration could not use them until now. +* Contentrain Migrate asks for the "private content" scope, so drafts, pending, scheduled and private posts arrive as drafts and are never published. Password-protected posts keep `[protected]`; the password itself never leaves WordPress. Nothing changes for exports you start yourself: the scope stays your choice. + = 0.5.0 = * Page builders: the Elementor layout tree and page settings, Divi's builder settings, the Elementor kit (global colours, fonts, layout), block-theme global styles and templates are exported without selecting them, so a migration can rebuild the design. Password-protected posts keep none of it. From af064ccd5318b5a3fc4348a3fdf52cc7ec38f1db Mon Sep 17 00:00:00 2001 From: AHMET BAYHAN BAYRAMOGLU <49499275+ABB65@users.noreply.github.com> Date: Fri, 2 Oct 2026 11:47:09 +0300 Subject: [PATCH 2/3] docs(readme): 0.6.0 changelog states posts keep their own status; privacy and REST API paragraphs name the private-content scope --- readme.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/readme.txt b/readme.txt index cc4d198..0c43663 100644 --- a/readme.txt +++ b/readme.txt @@ -31,7 +31,7 @@ The plugin contacts no host other than this site unless you choose GitHub delive **GitHub** — used only when you enter a repository and a token in step 3 and start the delivery. The plugin then calls the GitHub REST API at api.github.com to read the target repository's default branch (or the base branch you name) and file list, upload the exported files, and create one new branch holding them. What is sent: the exported content files you reviewed, a commit message, and the token you supplied. Nothing is sent to Contentrain or to any other host, and no analytics or telemetry is collected. The token is used for those requests only and is never stored in the database or in the export. Delivery never writes to your default branch and never overwrites a file you edited in Git. GitHub's terms: https://docs.github.com/site-policy/github-terms/github-terms-of-service — privacy policy: https://docs.github.com/site-policy/privacy-policies/github-privacy-statement -**REST export API (inbound)** — the plugin adds routes under `/wp-json/contentrain-bridge/v1/` that let a program you authorize start an export and read its files. The plugin sends nothing by itself: the program asks, with an application password of an administrator who has the export and manage_options capabilities. Contentrain Migrate uses these routes when you give it such a password to migrate this site; what Migrate then does with the content is governed by Contentrain's terms (https://contentrain.io/terms-of-service) and privacy policy (https://contentrain.io/privacy-policy). Revoke the application password in your profile to end that access; exports expire after a day. +**REST export API (inbound)** — the plugin adds routes under `/wp-json/contentrain-bridge/v1/` that let a program you authorize start an export and read its files. The plugin sends nothing by itself: the program asks, with an application password of an administrator who has the export and manage_options capabilities. Contentrain Migrate uses these routes when you give it such a password to migrate this site; what Migrate then does with the content is governed by Contentrain's terms (https://contentrain.io/terms-of-service) and privacy policy (https://contentrain.io/privacy-policy). The program that starts an export chooses its scope: Migrate asks for private content (drafts, pending, scheduled, private and password-protected posts, never the password) and for comments, and the exported files carry each post's own status. Revoke the application password in your profile to end that access; exports expire after a day. == Installation == @@ -72,14 +72,14 @@ The active theme and child theme, and optionally the source files of active plug == Privacy == -The plugin stores export ownership and a source revision marker. It sends nothing anywhere on its own; an export leaves the site only when you download it, deliver it to GitHub, or authorize a program to read it through the REST export API with an administrator's application password or a Contentrain Migrate connection key. For a connection key the plugin stores a fingerprint of the key (never the key), the Migrate order it is paired with, and the time and IP address of its last use; creating a new key or revoking it, and uninstalling the plugin, removes them. Export files are written to a private, per-administrator directory, are removed on uninstall, and expire after a day. An export can contain site content, author display names, selected post metadata and, if you chose it, privacy-minimized comments. Treat a downloaded export as you would a WordPress export file. If you deliver to GitHub, the exported content is sent to GitHub under the account whose token you provide; choose a private repository when the export includes draft or private content. +The plugin stores export ownership and a source revision marker. It sends nothing anywhere on its own; an export leaves the site only when you download it, deliver it to GitHub, or authorize a program to read it through the REST export API with an administrator's application password or a Contentrain Migrate connection key. For a connection key the plugin stores a fingerprint of the key (never the key), the Migrate order it is paired with, and the time and IP address of its last use; creating a new key or revoking it, and uninstalling the plugin, removes them. Export files are written to a private, per-administrator directory, are removed on uninstall, and expire after a day. An export can contain site content, author display names, selected post metadata and, if you or the program you authorized chose it, privacy-minimized comments and draft, pending, scheduled, private and password-protected posts (never the password). A program authorized through the REST API chooses the scope; Contentrain Migrate asks for private content. Treat a downloaded export as you would a WordPress export file. If you deliver to GitHub, the exported content is sent to GitHub under the account whose token you provide; choose a private repository when the export includes draft or private content. == Changelog == = 0.6.0 = * Advanced Custom Fields options pages ("Site settings", footer, contact details) are exported as site-wide fields in the migration data, typed like the fields of a post. They were already in the export as their own entry; a migration could not use them until now. -* Contentrain Migrate asks for the "private content" scope, so drafts, pending, scheduled and private posts arrive as drafts and are never published. Password-protected posts keep `[protected]`; the password itself never leaves WordPress. Nothing changes for exports you start yourself: the scope stays your choice. +* Contentrain Migrate now asks for the "private content" scope when it reads an export through the REST API, so drafts, pending, scheduled, private and password-protected posts come with their own status and are never published. A password-protected post keeps `[protected]`; the password itself never leaves WordPress. The plugin's behaviour is unchanged: the scope is chosen by whoever starts the export, and exports you start yourself are unaffected. = 0.5.0 = From f4959d07308ede9eeb476fbd1894a60eaf3fa195 Mon Sep 17 00:00:00 2001 From: AHMET BAYHAN BAYRAMOGLU <49499275+ABB65@users.noreply.github.com> Date: Fri, 2 Oct 2026 11:48:34 +0300 Subject: [PATCH 3/3] docs(readme): 0.6.0 changelog states each status as the export maps it (draft, in review, scheduled with its date) --- readme.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.txt b/readme.txt index 0c43663..f37e18e 100644 --- a/readme.txt +++ b/readme.txt @@ -79,7 +79,7 @@ The plugin stores export ownership and a source revision marker. It sends nothin = 0.6.0 = * Advanced Custom Fields options pages ("Site settings", footer, contact details) are exported as site-wide fields in the migration data, typed like the fields of a post. They were already in the export as their own entry; a migration could not use them until now. -* Contentrain Migrate now asks for the "private content" scope when it reads an export through the REST API, so drafts, pending, scheduled, private and password-protected posts come with their own status and are never published. A password-protected post keeps `[protected]`; the password itself never leaves WordPress. The plugin's behaviour is unchanged: the scope is chosen by whoever starts the export, and exports you start yourself are unaffected. +* Contentrain Migrate now asks for the "private content" scope when it reads an export through the REST API, so drafts, private and password-protected posts stay drafts, pending posts arrive in review, and a scheduled post keeps its publication date. A password-protected post keeps `[protected]`; the password itself never leaves WordPress. The plugin's behaviour is unchanged: the scope is chosen by whoever starts the export, and exports you start yourself are unaffected. = 0.5.0 =