=== GrowthSEO - Content Sync === Contributors: GrowthSEO Tags: rest api, headless, publishing, webhook Requires at least: 5.6 Tested up to: 6.9 Requires PHP: 7.4 Stable tag: 1.0.20 License: GPLv2 or later License URI: https://www.gnu.org/licenses/gpl-2.0.html Secure REST endpoint to publish posts from GrowthSEO backend via API key. == Description == GrowthSEO - Content Sync adds a secure REST API endpoint to your WordPress site so GrowthSEO can publish or update posts remotely. It uses an API key you control in WordPress settings, and supports featured images and HTML/Markdown content. - Improved Authorization - Endpoints: `GET /wp-json/growthseo/v1/ping`, `POST /wp-json/growthseo/v1/publish` - Accepts `title`, `slug`, `content_html` or `content_markdown`, optional `metaDescription`, `heroImageUrl`, `status` - Sets/updates posts by slug; supports `publish`, `draft`, `pending` == Installation == 1. Upload the plugin files to the `/wp-content/plugins/growthseo-content-sync` directory, or upload the ZIP via Plugins → Add New → Upload Plugin. 2. Activate the plugin through the 'Plugins' screen in WordPress. 3. Go to Settings → GrowthSEO - Content Sync. Copy the API Key. 4. In GrowthSEO, configure the Webhook Integration with the Bearer token. Endpoint base is your site URL, e.g. `https://example.com/wp-json/growthseo/v1/publish`. == Frequently Asked Questions == = How do I regenerate the API key? = On the Settings → GrowthSEO - Content Sync page, click "Generate New API Key". = What is the endpoint URL? = `/wp-json/growthseo/v1/publish` on your site. Test connectivity with `/wp-json/growthseo/v1/ping`. = What permissions are required? = Requests are authorized with the API key only. No user login is required. == Screenshots == 1. How GrowthSEO works. 2. Content Plan. 3. Backlinks. == Changelog == = 1.0.20 = * Added: "Allow forms, quizzes and custom styling" — an optional setting that keeps forms, quizzes and booking widgets working in your articles instead of letting WordPress strip them out. Off by default. Only an administrator or editor can turn it on, and the author you publish as must be one too. Sites on a WordPress network, or using DISALLOW_UNFILTERED_HTML, are unaffected. = 1.0.19 = * Improved: The plugin download is now around 30 KB instead of 5.6 MB. The admin menu icon was a 2048x2048 image being displayed at 20x20; it is now sized for its actual use. = 1.0.18 = * Added: "Generate New Key" — you can now replace your Integration Key at any time. The old key is revoked immediately. Previously a key could only be changed by deleting and reinstalling the plugin. * Added: Integration Keys are now stored as a one-way fingerprint instead of readable text, so a copy of your database no longer reveals a working key. Existing keys keep working and move to the new storage the first time you generate a new key. * Added: Recent Activity log on the settings page, listing every request the publish endpoint received — accepted or rejected — with time, result and article. No IP addresses are recorded. * Security: Fixed an issue where structured data (JSON-LD) supplied with an article was written to the page without validation. A caller holding a valid Integration Key could have used it to place scripts on published articles. Stored data is now re-encoded and anything that is not valid structured data is discarded. * Security: Repeated failed key attempts from one address are now rate limited. = 1.0.17 = * Fixed: Posts could be published without their featured image on slower sites. The featured image is now imported before the rest of the article's images, publishing keeps running if the connection drops, and a background check sets the image if the request is cut short. = 1.0.16 = * Added: Inline content images (not just the featured image) are now imported into the WordPress media library and served from your own domain instead of being hotlinked from external storage. Images are deduplicated across re-publishes, and any image that cannot be imported keeps its original URL so posts never show a broken image. = 1.0.15 = * Fixed: Posts published through the integration now automatically refresh the Rank Math and Yoast sitemap cache, so new posts appear in the sitemap without needing a manual re-save. = 1.0.14 = * Added: Alt text for hero image. = 1.0.13 = * Added: Default author selection in settings; published posts use the selected author (same as category). = 1.0.12 = * Improved: Improved Authorization = 1.0.11 = * Added: SEO Meta integration support for Yoast SEO, Rank Math, SEOPress, and All in One SEO * Improved: Automatically maps meta title, description, and keywords to installed SEO plugins = 1.0.10 = * Improved: Redesigned admin interface with clearer two-step setup process * Improved: Better visual separation between GrowthSEO Dashboard settings and WordPress settings * Improved: Simplified language throughout settings page for non-technical users * Fixed: Integration Key now properly preserved when saving other WordPress settings * Enhanced: Added helpful section headers and instructions to guide users through setup * Enhanced: Improved copy-to-clipboard functionality with clearer labels = 1.0.9 = * Fixed: YouTube/Vimeo embeds not rendering when HTML contained wrappers * Added: Allowlist for