=== Migro - Content Migration & Deployment ===
Contributors: migro
Donate link: https://buymeacoffee.com/migro
Tags: migration, staging, deployment, push-pull, backup
Requires at least: 5.6
Tested up to: 7.0
Requires PHP: 7.4
Stable tag: 2.4.0
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

You changed one post. Why clone the whole site? Migro deploys individual posts and pages between staging and production.

== Description ==

**Site-migration tools weren't built for editorial work. Migro was.**

Plugins like Duplicator and All-in-One WP Migration were built for moving hosts: clone the whole database, overwrite everything, hope nothing breaks. That's the wrong tool for the weekly grind of pushing finished posts to production.

Migro is a selective WordPress migration plugin built for that weekly grind. Pick a post. Click Push. Migro deploys *only* that post (with its categories, tags, featured image, embedded media, and alt text) and leaves the rest of the destination site untouched. Pull works the same way in reverse: grab live content back to staging for testing.

= Built for agencies and freelancers =

You're managing client sites with a staging-to-production workflow. The writer drafts on staging, you review, you deploy. Maybe the client wants to push their own finished drafts. Migro handles all of it:

* **Selective deployment.** Pick exactly the posts that should move. Nothing else on the destination changes.
* **Bidirectional Push and Pull.** Push staging to production, or pull production back to staging. Same flow either way.
* **Sync-key tracking.** Re-deploying the same post updates it in place, even if its slug or ID differs on the destination.
* **Backups before every overwrite.** One-click restore if a deployment was wrong.
* **Editor role can deploy.** Let your client push their own finished drafts without giving them admin access.
* **Unlimited.** No monthly cap, no upsell prompts blocking your work.

= Headline features =

* **Selective Push and Pull** between any two WordPress environments, with no monthly cap.
* **Sync-key re-deployment.** Push the same post twice and it updates in place — no duplicates, even if the destination slug or ID drifts.
* **Page builder detection.** Migro recognizes Elementor, Divi, Beaver, Bricks, Oxygen, Breakdance, Droip, and WPBakery content and warns you before a deployment can break a layout.
* **AI-powered alt text** for images missing it. Bring your own Anthropic, OpenAI, or Google Gemini key via the WordPress AI Connector. Existing alt text is never overwritten.
* **Encrypted credentials at rest** and one-click backup/restore on every overwrite.

= What comes with a deployment =

When you push a post, Migro brings everything attached to it:

* Post content, excerpt, slug, status, dates, comment status, and ping status
* All post meta (custom fields)
* Categories and tags, with hierarchies preserved
* Featured images, with smart MD5 deduplication so identical files aren't re-uploaded
* Embedded inline images, PDFs, videos, and other attached media
* Image alt text, in both the Media Library and inside post content (kept in sync)
* Author attribution (falls back to the deploying admin if the source author doesn't exist on the destination)

= Using a page builder? =

Page builders like Elementor, Divi, Beaver Builder, Bricks, Oxygen, Breakdance, Droip, and WPBakery store layouts as serialized data with hardcoded URLs, which doesn't survive a staging-to-production move without specialized handling. The free version detects page builder content in your posts and warns you before deployment, so you don't accidentally break a destination layout. Safe page builder migration (serialized data rewriting and CSS regeneration) is part of Migro Pro.

= Built for real production workflows =

* **Two conflict modes.** Overwrite (update in place, same post ID and URL) or Skip (don't touch existing content).
* **Pre-deployment backups** stored locally, retained for 30 days, restorable in one click.
* **Migration logs** with full status, error messages, and configurable retention.
* **Direct database connection** for reliable transfers, plus WordPress REST API authentication via Application Passwords.
* **Encrypted credentials at rest.** Database passwords are encrypted before they're saved to the options table.
* **Works with local development environments** including Local by WP Engine, with custom sockets, configurable timeouts, and SSL verification toggles.
* **Available in English, Brazilian Portuguese (pt_BR), and Spanish (es_ES).**

= How it works =

1. Install Migro on both your staging and production sites
2. Run the setup wizard to connect the two
3. Pick the posts to deploy and click Push (or Pull) — no command line required (WP-CLI is available in Pro for automation and CI/CD)
4. Review the per-item operation summary, and restore from backup if anything looks wrong

= Need more? =

Migro Pro adds Custom Post Types, ACF, Yoast SEO, WooCommerce, scheduled migrations, WP-CLI, full page builder migration, the Quick Migrate sidebar in Gutenberg, and AI-generated SEO metadata. The free version is fully functional on its own. No usage caps, no feature locks, no nag screens.

== Installation ==

1. Upload the plugin files to `/wp-content/plugins/migro-content-migrator`
2. Activate the plugin through the 'Plugins' screen
3. Follow the setup wizard to configure your connection
4. Start deploying content!

== External Services ==

Migro can connect to two categories of external services. Both are off by default and are never contacted unless you take an explicit action.

**1. AI provider for alt-text generation (optional, opt-in, your own account).**

If you enable the AI Enhancements feature on the AI tab and configure a provider via the WordPress 7.0 AI Connector, Migro sends a single image (as a base64-encoded request payload) plus a short prompt to your configured AI provider in order to generate alt text for that specific image. Supported providers in the free version are Anthropic, OpenAI, and Google Gemini. The request is sent directly from your WordPress site to the provider using *your* API key; Migro never proxies the call and never sees your key. No request is ever made unless you explicitly trigger an alt-text generation, and existing alt text is never overwritten. Each provider's terms apply to your account independently:

* Anthropic: terms https://www.anthropic.com/legal/consumer-terms — privacy https://www.anthropic.com/legal/privacy
* OpenAI: terms https://openai.com/policies/terms-of-use — privacy https://openai.com/policies/privacy-policy
* Google Gemini: terms https://policies.google.com/terms — privacy https://policies.google.com/privacy

**2. Anonymous usage telemetry to Migro (optional, opt-in, off by default).**

After installation Migro shows a one-time prompt asking whether you want to share anonymous usage data. Nothing is sent unless you choose Yes. If you decline or ignore the prompt, no data ever leaves your site, and you can change your choice at any time on the Settings page. When enabled, Migro sends anonymous, non-personal information (plugin version, WordPress version, PHP version, and aggregate deployment counts) to https://migro.dev to help prioritize roadmap work. It never sends post content, URLs, credentials, or personally identifiable information.

* Migro privacy policy: https://migro.dev/privacy
* Migro terms of service: https://migro.dev/terms

== Frequently Asked Questions ==

= How is Migro different from Duplicator or All-in-One WP Migration? =
Those are *site migration* tools, built for moving an entire WordPress install from one host to another in a one-shot, all-or-nothing transfer. Migro is a *content deployment* tool, built for the ongoing workflow of pushing individual posts from staging to production while leaving the rest of the live site alone. Different problem, different product.

= Do I need to install Migro on both sites? =
Yes. Migro needs to be active on both the source and destination site.

= Can content go both ways? =
Yes. Push and Pull are both first-class operations. You can pull live content back to staging just as easily as pushing staging drafts to production.

= What happens to images that already exist on the destination? =
Migro hashes incoming media with MD5. If an identical file already exists in the destination's Media Library, Migro links to the existing attachment instead of uploading a duplicate.

= Will deploying a post change its URL on the destination? =
Migro preserves the original slug. The destination URL will match the source unless the permalink structure differs between environments.

= What's the difference between Overwrite and Skip? =
Overwrite updates the existing item in place: same post ID, same URL, updated content. Skip leaves any existing destination post untouched. You pick the mode at deployment time.

= What if I deploy something by mistake? =
Every deployment that overwrites existing content creates a local backup first. The Backups page lets you restore the previous version with one click. Backups are retained for 30 days by default.

= Does the AI alt-text feature cost anything? =
Migro's AI integration uses the WordPress 7.0 AI Connector. You bring your own API key (Anthropic, OpenAI, or Google Gemini) and pay your provider directly. Migro never charges you for AI usage, never proxies the requests, and never sees your key. Generated alt text is cached locally so re-deploying the same content doesn't re-call the provider. Existing alt text is never overwritten.

= Can Editors deploy content, or only Admins? =
Editors can run deployments. This is intentional. For agencies, it lets your client push their own finished drafts without you needing to give them admin access.

= Are there any usage limits? =
No. Migro is unlimited. There's no monthly cap and no nag screen. The Pro version adds features (Custom Post Types, ACF, Yoast, WooCommerce, scheduling, WP-CLI), not volume.

= Does Migro work with multisite? =
Migro is designed for single-site installations. Multisite is not currently supported.

= Does Migro migrate users? =
No. User accounts are not migrated. If a post author doesn't exist on the destination, the post is assigned to the admin who ran the deployment.

= Is my database password stored securely? =
Database passwords are encrypted before being saved to the WordPress options table. They are never stored or transmitted in plain text.

= Can I use Migro with a staging environment on a different server? =
Yes, as long as you have the remote site's database credentials and can create an Application Password on that site. Migro also supports custom sockets (for Local by WP Engine and similar), custom timeouts, and SSL verification toggles for tricky local environments.

= What if a deployment fails halfway through? =
Each item is deployed independently. If one fails, the others continue. The Logs page shows exactly which items succeeded, which were skipped, and which failed with the error message and a retry option.

= Does Migro handle WooCommerce product variations? =
Yes, but WooCommerce migration requires the Pro version. Variable products and all their variations are fully migrated including pricing, stock, attributes, and images.

= Does Migro work with page builders? =
The free version detects page builder content (Elementor, Divi, Beaver Builder, Bricks, Oxygen, Breakdance, Droip, WPBakery) and warns you before deployment, because page builders store their layouts as serialized data with hardcoded URLs that don't survive a host change without specialized handling. Safe page builder migration, including serialized data rewriting and CSS regeneration, is part of Migro Pro.

= Is Migro translated into other languages? =
Yes. English, Brazilian Portuguese (pt_BR), and Spanish (es_ES) are bundled. The non-English translations started as machine translations and improve with community contributions.

= Does Migro collect any usage data? =
Only if you explicitly opt in. After installation Migro shows a one-time prompt asking whether you want to share anonymous usage data. Nothing is sent unless you choose "Yes". If you decline or ignore the prompt, no data ever leaves your site, and you can change your choice at any time on the Settings page. When enabled, Migro sends anonymous, non-personal information such as the plugin version, WordPress/PHP version, and aggregate deployment counts. It never sends post content, URLs, credentials, or any personally identifiable information.

= What's the minimum WordPress version required? =
WordPress 5.6. This is the version that introduced Application Passwords, which Migro uses for REST API authentication.

== Screenshots ==

1. Selective content deployment: pick exactly what should move
2. Connection setup with the staging/production wizard
3. Per-item deployment results with the full operation summary
4. Backups page with one-click restore

== Changelog ==

= 2.4.0 - 2026-05-29 =
- New AI Enhancements tab with optional AI alt-text generation for images missing alt, powered by your WordPress 7.0 AI Connector (Anthropic, OpenAI, Google Gemini). Existing alt text is never overwritten, and responses are cached locally so re-migrating the same content does not re-call the provider.
- When multiple AI providers are configured, each AI-powered feature can be routed to a specific provider.
- New Alt Text Sync keeps inline alt in post content aligned with the Media Library during migration, with skip and overwrite options for existing values.
- PDFs, videos, and other attached media referenced by your posts now migrate automatically alongside featured images.
- Improved deduplication for large images prevents duplicate uploads of scaled variants.
- More accurate progress reporting during long AI-assisted migrations, so the bar no longer appears stuck.
- Batch result cards now reveal the full per-item operation summary behind a View details toggle.
- Settings page self-heals previously saved empty values, and Passive Mode no longer locks on for production sites running on local domains.
- Refreshed Quick Guide covering AI Enhancements, scheduled migrations, and WP-CLI.
- General stability improvements, translation updates, and security hardening.

= 2.3.4 =
- Fully tested on WordPress 7.0

= 2.3.3 =
- Improved post parent remapping to preserve hierarchical relationships accurately.
- Normalized database draft date handling for modern MySQL strict mode environments.
- Corrected documentation and setup flow to clarify that the Free tier has unlimited migrations.
- Improved migration logs and failure status reporting.
- Minor translation updates and stability fixes.

= 2.3.2 =
- Internal reliability and maintenance improvements.
- Small translation updates and improvements.

= 2.3.1 =
- Strengthened encryption of stored connection credentials and other at-rest secrets.
- Migrations now abort safely if a requested pre-migration backup cannot be created, so content is never deployed without its backup.
- Fixed the setup wizard not showing correct messages.
- Fixed an issue where users with the Editor role were blocked from accessing the migration screen.
- General security hardening and stability improvements.

= 2.3.0 =
- Full internationalization: every user-facing string in the plugin is now translatable.
- Added Brazilian Portuguese (pt_BR) and Spanish (es_ES) translations. These are initial machine translations. Community review and contributions are very welcome.
- Improved translation consistency across the plugin.
- General stability improvements and minor bug fixes.

= 2.2.9 =
- Improved admin menu navigation with a dedicated Backups page.
- Added pre-migration compatibility checks for posts containing page builder content.
- Improved page builder data handling for more reliable migrations.
- Hardened security with additional rate limiting and prepared database queries.
- General stability improvements and minor bug fixes.

= 2.2.8 =
- Added optional, opt-in telemetry to help improve the plugin. It is off by default. No data is ever sent unless you explicitly consent to the prompt, and declining keeps it permanently disabled. See the FAQ for what is collected.
- Improved Media Path Preservation to ensure folder structures are maintained during transfers.
- Hardened Beaver Builder support for more reliable complex layout migrations.
- Implemented a promotional UI for the Migro Beta program for Free users.
- General stability improvements and minor bug fixes.

= 2.2.6 =
- Enhanced remote connection authentication with advanced Sodium encryption capabilities.
- Improved media deduplication logic to prevent redundant file uploads during complex migrations.
- Resolved minor issues to ensure complete media metadata preservation during transfers.

= 2.2.5 =
* General security improvements to strengthen the plugin
* Usability improvements and stability fixes

= 2.2.4 =
* General security improvements to strengthen the plugin
* Usability improvements and stability fixes

= 2.2.3 =
* Initial release
* Posts and pages migration
* Categories and tags support
* Featured images with deduplication
* Batch migration
* Pre-migration backups
* Setup wizard
* Modern interface

== Upgrade Notice ==

= 2.4.0 =
Adds AI alt-text generation, Alt Text Sync between inline images and the Media Library, and automatic migration of PDFs, videos, and other attached media. Existing alt text is never overwritten.
