Content Relay pushes one piece of content from staging to live, or from live back to staging or development, without a full database migration. It relays a single page, post or custom post type entry, with every translation and its media, between the environments of the same site, in either direction.
Typical uses:
In each case you sync only that content, without copying a whole database or overwriting what else changed on the other site. Orders, form entries, users and settings on the live site are left alone.
The theme must match. Content Relay only works between sites running the same theme at the same version. A different active theme or theme version blocks the relay; the same version with different theme files gives a warning. Deploy the theme first, then relay the content.
The same plugin runs on both sites. The receiving site issues a key; the sending site stores it. From then on an administrator can hover an item in Pages (or any other content list switched on in the settings), choose Relay to…, review what the receiving site plans to do, and relay. Many posts can be relayed at once with WP-CLI.
Content is written byte for byte. Block markup is edited only where a reference changes; it is never re-serialized.
The receiving site plans every relay and answers with a list of what it will create, update, reuse or refuse, with a field, meta and content diff for anything it would replace. Nothing is written until an administrator approves that plan. If the receiving site changes in the meantime, the relay is refused and the plan must be approved again.
Content that was edited on the receiving site since its last relay is blocked. It can be relayed with Overwrite, which keeps a backup.
content_relay_purge_page_cache.<html lang>, the hreflang alternates, that no link still points at the sending site, and that its images load.content_relay_query_dependencies filter; the receiving site then warns when they find nothing.CONTENT_RELAY_ENCRYPTION_KEY, or with the AUTH_KEY and SECURE_AUTH_KEY salts.manage_options) can relay, issue keys or add connections. A key stops working when it is revoked or when the administrator who issued it loses that role.CONTENT_RELAY_IP_ALLOWLIST in wp-config.php limits which sending IPs are accepted.Content Relay contacts only the sites you connect it to with a key: it sends the relay to the receiving site and afterwards fetches the relayed pages from it to check them. It uses no third-party service, sends nothing to the plugin author and does no tracking.
wp content-relay keys generate --label=<label> · keys list · keys revoke <kid> — on the receiving site.wp content-relay connections add <key> --label=<label> · connections list · connections test <label> · connections remove <label> — on the sending site.wp content-relay plan <page-id> --to=<label> — ask the receiving site for its plan without relaying.wp content-relay push <page-id> --to=<label> [--overwrite] [--flush-cache] [--yes] — relay, then check the pages.wp content-relay push-many [<id>...] --to=<label> [--post_type=<type>] [--tag=<slug>] [--category=<slug>] [--all] [--dry-run] — relay many posts, one translation group at a time.wp content-relay verify <session> — check a relay’s pages again.wp content-relay rollback <session> --to=<label> — roll back a relay sent to another site; without --to, a relay received here.wp content-relay history [--direction=out|in] [--offline]wp content-relay discover <page-id> · bundle <page-id> · plan <dir> · apply <dir> — an offline bundle, written to uploads/content-relay/bundles/, for sites that cannot reach each other.content_relay_post_types — post types that can be relayed (default: pages).content_relay_meta_denylist — meta keys never relayed.content_relay_resolvers — reference resolvers used to discover what a page needs.content_relay_query_dependencies — content a page lists by query, checked after a relay.content_relay_page_cache_integrations, content_relay_purge_page_cache — page-cache purging.content_relay_before_commit, content_relay_applied — around the content commit on the receiving site.content_relay_request_denied — a refused relay request.content_relay_http_args, content_relay_max_chunk_bytes — transport tuning.