{"id":334135,"date":"2026-07-23T06:23:47","date_gmt":"2026-07-23T06:23:47","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/writer-gpt-publisher\/"},"modified":"2026-07-23T06:27:11","modified_gmt":"2026-07-23T06:27:11","slug":"writer-gpt","status":"publish","type":"plugin","link":"https:\/\/fy.wordpress.org\/plugins\/writer-gpt\/","author":20232752,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.8.1","stable_tag":"2.8.1","tested":"7.0.2","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"Writer GPT Publisher","header_author":"Writer GPT","header_description":"Auto-publish AI-generated articles from your Writer GPT account to this WordPress site. Includes duplicate-publish protection and SEO meta sync.","assets_banners_color":"9a9db1","last_updated":"2026-07-23 06:27:11","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/writer-gpt.com\/wordpress-integration","header_author_uri":"https:\/\/writer-gpt.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":66,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.8.1":{"tag":"2.8.1","author":"thedoersfirm","date":"2026-07-23 06:27:11"}},"upgrade_notice":{"2.8.1":"<p>Fixes a WordPress 5.9+ deprecation notice on the plugin settings page by replacing the deprecated <code>who<\/code> argument in <code>get_users()<\/code> with the modern <code>capability<\/code> equivalent. No behavior changes.<\/p>","2.8.0":"<p>Plugin Check compliance fixes: translators comment on pluralized string, wp_parse_url() in place of parse_url(), removed prohibited suppress_filters from internal post lookups. No behavior changes.<\/p>","2.7.9":"<p>Ownership metadata clarified for WordPress.org review \u2014 Author, Author URI, Plugin URI, and an ownership contact on writer-gpt.com added. No behavior changes.<\/p>","2.7.8":"<p>WordPress.org compliance pass: contributor name, text-domain rename, output escaping, and prefixed option\/class names. One-time automatic migration preserves your saved plugin token.<\/p>","2.7.6":"<p>Required for SEO Agent refreshes: update jobs now preserve target metadata and update existing WordPress posts instead of creating duplicates.<\/p>","2.7.3":"<p>Critical fix: re-download required. The 2.7.2 ZIP was missing the SEO Copilot module file and could not activate. 2.7.3 ships it and adds a safety check so this can never brick activation again.<\/p>","2.7.2":"<p>WordPress.org compliance: bumped &quot;Tested up to&quot; to WordPress 7.0. No behavior changes.<\/p>","2.7.1":"<p>WordPress.org compliance: dropped the disallowed <code>Update URI<\/code> header and updated the &quot;Tested up to&quot; version. No behavior changes.<\/p>","2.6.3":"<p>WordPress.org compliance pass. Adds a one-time disclosure notice and tightened plugin headers. No behavior changes for existing sites.<\/p>","2.6.2":"<p>Recommended for everyone: prevents duplicate publishing when push and cron overlap.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3619483,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3619483,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3619483,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3619483,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["2.8.1"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Connection panel with token, verify button, and connection status.","2":"Stats dashboard (total published, pending, today, this week).","3":"Jobs \/ activity log with per-article status and error reasons.","4":"Image, Content, and Advanced settings tabs.","5":"WordPress dashboard widget showing sync status at a glance."}},"plugin_section":[262246],"plugin_tags":[2353,569,7143,186,1558],"plugin_category":[55],"plugin_contributors":[272922],"plugin_business_model":[],"class_list":["post-334135","plugin","type-plugin","status-publish","hentry","plugin_section-dashboard-widgets","plugin_tags-ai","plugin_tags-automation","plugin_tags-publishing","plugin_tags-seo","plugin_tags-sync","plugin_category-seo-and-marketing","plugin_contributors-thedoersfirm","plugin_committers-thedoersfirm"],"banners":{"banner":"https:\/\/ps.w.org\/writer-gpt\/assets\/banner-772x250.png?rev=3619483","banner_2x":"https:\/\/ps.w.org\/writer-gpt\/assets\/banner-1544x500.png?rev=3619483","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/writer-gpt\/assets\/icon-128x128.png?rev=3619483","icon_2x":"https:\/\/ps.w.org\/writer-gpt\/assets\/icon-256x256.png?rev=3619483","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>Author:<\/strong> Writer GPT \u2014 https:\/\/writer-gpt.com\n<strong>Ownership contact:<\/strong> mts@writer-gpt.com\n<strong>Plugin homepage:<\/strong> https:\/\/writer-gpt.com\/wordpress-integration<\/p>\n\n<p>Writer GPT Publisher is the companion plugin for <a href=\"https:\/\/writer-gpt.com\">writer-gpt.com<\/a>. When you click <em>Publish<\/em> in Writer GPT, this plugin receives the article on your WordPress site and creates the post for you, with featured images and SEO meta automatically applied.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>Automatic sync \u2014 articles you publish in Writer GPT are pushed to this site.<\/li>\n<li>Featured image + inline images downloaded into the Media Library (with size and compression controls).<\/li>\n<li>SEO meta written for Yoast SEO, Rank Math, and All in One SEO when those plugins are active.<\/li>\n<li>Draft-vs-publish choice, category &amp; author defaults, slug control.<\/li>\n<li>Duplicate-publish protection: the same job is never published twice, even on push + cron overlap.<\/li>\n<li>Activity log and connection-health panel inside the WordPress admin.<\/li>\n<\/ul>\n\n<h4>Account required<\/h4>\n\n<p>A free or paid Writer GPT account is required, because the AI content is created on the Writer GPT cloud and pushed to this site. Sign up at <a href=\"https:\/\/writer-gpt.com\/\">writer-gpt.com<\/a>.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to the Writer GPT cloud service. It does not call any other third-party service.<\/p>\n\n<p><strong>Service:<\/strong> Writer GPT API (operated by Writer GPT)\n<strong>Endpoint:<\/strong> <code>https:\/\/npfnholmepecjiepradj.supabase.co\/functions\/v1\/plugin-pull-jobs<\/code> and <code>\/plugin-ack-job<\/code><\/p>\n\n<p><strong>What is sent, and when:<\/strong><\/p>\n\n<ul>\n<li>When you click <em>Verify Connection<\/em>: your plugin token, this site's URL, and the plugin version, so the service can confirm pairing.<\/li>\n<li>When the plugin pulls jobs (push notification or scheduled cron, default every 30 seconds when enabled): the plugin token and a request for any pending articles assigned to this site.<\/li>\n<li>When a job is processed: a small acknowledgement containing the job ID, whether publish succeeded, and the resulting WordPress post ID \u2014 so the same article is never resent.<\/li>\n<\/ul>\n\n<p>The plugin does <strong>not<\/strong> transmit visitor data, comments, existing posts, user accounts, or any data outside of the items above.<\/p>\n\n<p><strong>Terms &amp; privacy:<\/strong><\/p>\n\n<ul>\n<li>Terms of Service: <a href=\"https:\/\/writer-gpt.com\/terms-of-service\">https:\/\/writer-gpt.com\/terms-of-service<\/a><\/li>\n<li>Privacy Policy: <a href=\"https:\/\/writer-gpt.com\/privacy-policy\">https:\/\/writer-gpt.com\/privacy-policy<\/a><\/li>\n<\/ul>\n\n<p>By connecting your Writer GPT plugin token, you agree to those Terms and Privacy Policy.<\/p>\n\n<h3>Privacy<\/h3>\n\n<p>Activity logs, connection status, and the encrypted plugin token are stored in this site's <code>wp_options<\/code> table. The plugin does not place tracking pixels, cookies, or analytics on your public site. Outgoing connections are made only to the Writer GPT endpoints listed above.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>writer-gpt-com<\/code> folder to <code>\/wp-content\/plugins\/<\/code> (or install the ZIP via Plugins \u2192 Add New \u2192 Upload Plugin).<\/li>\n<li>Activate \"Writer GPT Publisher\" from the Plugins screen.<\/li>\n<li>Go to <strong>Writer-GPT<\/strong> in the admin menu and paste the plugin token from your Writer GPT dashboard (Publish to WordPress \u2192 Sites).<\/li>\n<li>Click <em>Verify Connection<\/em>. You're done \u2014 new articles will appear automatically.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"where%20do%20i%20find%20my%20plugin%20token%3F\"><h3>Where do I find my plugin token?<\/h3><\/dt>\n<dd><p>Log in to writer-gpt.com, open <em>Publish to WordPress<\/em> \u2192 <em>Sites<\/em>, and copy the token shown for this site.<\/p><\/dd>\n<dt id=\"do%20articles%20publish%20automatically%3F\"><h3>Do articles publish automatically?<\/h3><\/dt>\n<dd><p>Yes, unless you toggle the <em>Save as draft<\/em> option in Content Settings.<\/p><\/dd>\n<dt id=\"does%20this%20work%20with%20my%20seo%20plugin%3F\"><h3>Does this work with my SEO plugin?<\/h3><\/dt>\n<dd><p>Yes \u2014 Yoast SEO, Rank Math, and All in One SEO meta titles and descriptions are written automatically when those plugins are active.<\/p><\/dd>\n<dt id=\"how%20often%20does%20the%20plugin%20check%20for%20new%20articles%3F\"><h3>How often does the plugin check for new articles?<\/h3><\/dt>\n<dd><p>The plugin receives push notifications from Writer GPT instantly. A fallback cron checks every 30 seconds when push delivery is unavailable.<\/p><\/dd>\n<dt id=\"can%20i%20use%20this%20plugin%20without%20a%20writer%20gpt%20account%3F\"><h3>Can I use this plugin without a Writer GPT account?<\/h3><\/dt>\n<dd><p>No. A Writer GPT account is required because content is generated on the Writer GPT cloud.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.8.1<\/h4>\n\n<ul>\n<li>COMPLIANCE: Replaced the deprecated <code>who =&gt; 'authors'<\/code> argument in <code>get_users()<\/code> with the modern <code>capability =&gt; array('edit_posts')<\/code> equivalent (deprecated since WordPress 5.9). Fixes a deprecation notice on the plugin settings page. No functional changes.<\/li>\n<\/ul>\n\n<h4>2.8.0<\/h4>\n\n<ul>\n<li>COMPLIANCE: Plugin Check fixes \u2014 added a translators comment on the pluralized decay-alert string, switched <code>parse_url()<\/code> to <code>wp_parse_url()<\/code>, and removed the prohibited <code>suppress_filters<\/code> argument from internal post lookups. No functional changes.<\/li>\n<\/ul>\n\n<h4>2.7.9<\/h4>\n\n<ul>\n<li>COMPLIANCE: Clarified plugin ownership metadata for WordPress.org review \u2014 added explicit Author, Author URI, Plugin URI, and an ownership contact on the plugin's own domain (mts@writer-gpt.com). No functional changes.<\/li>\n<\/ul>\n\n<h4>2.7.8<\/h4>\n\n<ul>\n<li>COMPLIANCE: WordPress.org review fixes \u2014 corrected the <code>Contributors<\/code> username, renamed the plugin text domain to match the slug (<code>writer-gpt<\/code>), escaped every translated string at output using <code>esc_html_e<\/code> \/ <code>esc_html__<\/code> \/ <code>esc_attr<\/code>, and prefixed the settings option (<code>writer_gpt_publisher_settings<\/code> \u2192 <code>wgpt_settings<\/code>) and main class (<code>Writer_GPT_Publisher<\/code> \u2192 <code>WGPT_Publisher<\/code>).<\/li>\n<li>MIGRATION: One-time automatic upgrade copies the legacy option value into the new key on activation, so existing sites keep their plugin token and settings.<\/li>\n<li>No functional changes to publishing, cron, REST, or image handling.<\/li>\n<\/ul>\n\n<h4>2.7.7<\/h4>\n\n<ul>\n<li>NEW: Autopilot now scans WordPress Posts by default. Pages are opt-in via the new \"Also monitor WordPress Pages\" setting \u2014 for pages we only recommend content (copy &amp; paste manually) to avoid conflicts with page builders like Elementor, Beaver, etc.<\/li>\n<li>UI: WordPress activity list now shows \"Updated\" (blue) for refresh jobs and \"Published\" (green) for new posts.<\/li>\n<li>FIX: Autopilot \"Refreshed\" tab now includes recently-updated content, and the \"Refresh status\" button re-syncs job + task state with a visible spinner.<\/li>\n<\/ul>\n\n<h4>2.7.6<\/h4>\n\n<ul>\n<li>UI: \"SEO Copilot\" now appears as a submenu under the main \"Writer-GPT\" menu instead of a separate top-level menu.<\/li>\n<li>FIX: Refresh publish jobs now preserve update target metadata from the queue, so SEO Agent refresh approvals update the existing WordPress post instead of being treated as new publishes.<\/li>\n<li>UI: Refresh approvals are labeled \"Update Content\" while new article approvals are labeled \"Publish\".<\/li>\n<\/ul>\n\n<h4>2.7.4<\/h4>\n\n<ul>\n<li>FIX: Refresh\/update jobs now resolve the target post by <code>existing_wp_post_id<\/code>, then <code>source_url<\/code> (via <code>url_to_postid<\/code> and slug lookup) before publishing. If no post can be located, the job aborts instead of silently creating a duplicate.<\/li>\n<li>IMPROVEMENT: <code>source_url<\/code> is now accepted on update jobs as a safety-net match key.<\/li>\n<\/ul>\n\n<h4>2.7.3<\/h4>\n\n<ul>\n<li>FIX: Packaging \u2014 ZIP now ships the <code>includes\/class-wgpt-seo-copilot.php<\/code> module file that was missing in 2.7.2, which prevented activation on fresh installs.<\/li>\n<li>HARDENING: Main plugin file now loads the SEO Copilot module defensively, so a missing module file shows an admin notice instead of a fatal error.<\/li>\n<\/ul>\n\n<h4>2.7.2<\/h4>\n\n<ul>\n<li>COMPLIANCE: Bumped \"Tested up to\" to WordPress 7.0 per WP.org review.<\/li>\n<\/ul>\n\n<h4>2.7.1<\/h4>\n\n<ul>\n<li>COMPLIANCE: Removed the <code>Update URI<\/code> header (not allowed for plugins hosted on WordPress.org).<\/li>\n<li>COMPLIANCE: Bumped \"Tested up to\" to WordPress 6.8.<\/li>\n<\/ul>\n\n<h4>2.6.3<\/h4>\n\n<ul>\n<li>COMPLIANCE: First-run admin disclosure notice covering the Writer GPT cloud connection.<\/li>\n<li>COMPLIANCE: External-services disclosure added to readme and settings UI.<\/li>\n<li>HEADERS: GPLv2-or-later normalized, <code>Update URI: false<\/code>, <code>Tested up to: 6.7<\/code>, <code>Requires at least: 6.2<\/code>, dedicated Plugin URI for the integration landing page.<\/li>\n<li>SECURITY: Nonce-protected dismiss action for the disclosure notice.<\/li>\n<\/ul>\n\n<h4>2.6.2<\/h4>\n\n<ul>\n<li>Hardened duplicate-publish protection: jobs are claimed with a row-level lock so push + cron overlap can never publish the same article twice.<\/li>\n<li>More aggressive ACK on partial failures so the queue advances cleanly.<\/li>\n<\/ul>\n\n<h4>2.6.1<\/h4>\n\n<ul>\n<li>Better failure reasons surfaced in the activity log (network, auth, image, SEO).<\/li>\n<li>Improved cron rescheduling after WP-Cron downtime.<\/li>\n<\/ul>\n\n<h4>2.6.0<\/h4>\n\n<ul>\n<li>NEW: Stealth BYOK compatibility \u2014 recognizes the <code>STEALTH_BYOK_REQUIRED<\/code> response and surfaces a clear, actionable message instead of a generic API error.<\/li>\n<li>NEW: Connection status reports <code>byok_required<\/code> so the Writer GPT dashboard can prompt you to add your Gemini API key.<\/li>\n<li>NEW: Gracefully handles jobs that arrive without a featured image when the source plan requires BYOK (logs an info line instead of treating it as a failure).<\/li>\n<\/ul>\n\n<h4>2.5.0<\/h4>\n\n<ul>\n<li>Featured-image reliability: JPEG compression and dimension guards before upload.<\/li>\n<li>Always-on featured-image diagnostics logging.<\/li>\n<li>Featured-image errors now reported back in the job ACK so the dashboard shows the actual reason.<\/li>\n<li>Content-image fallback when an article has no dedicated featured image.<\/li>\n<li>SmallMode retry path for oversized thumbnails (800\u00d7800).<\/li>\n<\/ul>\n\n<h4>2.2.1<\/h4>\n\n<ul>\n<li>Added Image Settings, Content Settings, and Advanced settings tabs.<\/li>\n<li>Hosted-URL image delivery to avoid large payloads.<\/li>\n<li>Better retries \/ timeouts and optional debug logging.<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Complete redesign, push notifications for instant sync, stats dashboard, All in One SEO support, auto-publish toggle.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Auto-publish AI-generated articles from your Writer GPT account to this WordPress site. Requires a free or paid Writer GPT account.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/fy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/334135","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/fy.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/fy.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=334135"}],"author":[{"embeddable":true,"href":"https:\/\/fy.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/thedoersfirm"}],"wp:attachment":[{"href":"https:\/\/fy.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=334135"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/fy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=334135"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/fy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=334135"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/fy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=334135"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/fy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=334135"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/fy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=334135"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}