{"id":342038,"date":"2026-09-09T13:08:48","date_gmt":"2026-09-09T13:08:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/beky-ai-blog-generator\/"},"modified":"2026-09-17T15:21:28","modified_gmt":"2026-09-17T15:21:28","slug":"beky-ai-blog-generator","status":"publish","type":"plugin","link":"https:\/\/sa.wordpress.org\/plugins\/beky-ai-blog-generator\/","author":23514648,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.34","stable_tag":"1.0.34","tested":"7.1","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"Beky AI Blog Generator","header_author":"Beky","header_description":"Beky AI Blog Generator \u2013 AI writing assistant for WordPress: drafts, rewrites, SEO meta, translations, images, and a title-to-published pipeline.","assets_banners_color":"bb8fc8","last_updated":"2026-09-17 15:21:28","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/beky.io","header_plugin_uri":"https:\/\/beky.io\/plugins-and-pricing\/ai-blog-generator","header_author_uri":"https:\/\/beky.io","rating":0,"author_block_rating":0,"active_installs":0,"downloads":273,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.30":{"tag":"1.0.30","author":"orthoplex","date":"2026-09-09 13:08:18","revision":3688332},"1.0.32":{"tag":"1.0.32","author":"orthoplex","date":"2026-09-13 09:59:51","revision":3693506},"1.0.33":{"tag":"1.0.33","author":"orthoplex","date":"2026-09-17 11:47:33","revision":3700206},"1.0.34":{"tag":"1.0.34","author":"orthoplex","date":"2026-09-17 15:21:28","revision":3700506}},"upgrade_notice":{"1.0.24":"<p>Plugin Check compliance only \u2014 uninstall uses WP_Filesystem and the plugin no longer references a WordPress 6.5 function. Nothing changes for day-to-day use.<\/p>","1.0.23":"<p>Fixes a fatal error on activate from invalid ABSPATH\/namespace ordering in 1.0.22.<\/p>","1.0.22":"<p>Internal Plugin Check hygiene only \u2014 notice-hook and ABSPATH scanner false-positives cleared. Nothing changes for day-to-day use.<\/p>","1.0.21":"<p>Internal Plugin Check hygiene only \u2014 ABSPATH guards normalized and Beky notices moved inside Beky pages. Nothing changes for day-to-day use.<\/p>","1.0.20":"<p>Layout and Plugin Check hygiene updates. No change to day-to-day AI features.<\/p>","1.0.19":"<p>Uninstall now clears any leftover plugin-owned uploads cache directory. No change to normal operation.<\/p>","1.0.18":"<p>Readme now discloses external services (api.beky.io and admin-supplied URL fetches) per WordPress.org guidelines. No functional change.<\/p>","1.0.17":"<p>Settings save is admin-only (manage_options). Editors can still use the pipeline and AI tools.<\/p>","1.0.16":"<p>WordPress.org packaging and enqueue fixes. After updating, hard-refresh Beky \u2192 AI Blog Generator so admin scripts reload.<\/p>","1.0.15":"<p>Renamed to Beky AI Blog Generator. After updating, hard-refresh Beky \u2192 AI Blog Generator so admin scripts reload.<\/p>","1.0.0":"<p>Initial release of Beky AI Blog Generator. Activate a license under Beky \u2192 Licenses before using AI features.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.gif":{"filename":"icon-128x128.gif","revision":3688474,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128}},"assets_banners":{"banner-772x250.png":{"filename":"banner-772x250.png","revision":3688332,"resolution":"772x250","location":"assets","locale":"","width":3125,"height":1021}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.30","1.0.32","1.0.33","1.0.34"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Content Pipeline kanban \u2014 topics through outlines, draft content, WordPress draft, and publish.","2":"Block editor AI sidebar \u2014 generate, rewrite, summarize, translate, and SEO meta.","3":"Beky Licenses screen \u2014 activate your Beky AI Blog Generator license and manage seats.","4":"Brand &amp; Voice settings \u2014 tone, audience, and brand context for better generations.","5":"Image generation \u2014 create and attach featured or inline images to a draft."}},"plugin_section":[],"plugin_tags":[2353,323,529,25198,186],"plugin_category":[55],"plugin_contributors":[270362],"plugin_business_model":[],"class_list":["post-342038","plugin","type-plugin","status-publish","hentry","plugin_tags-ai","plugin_tags-blog","plugin_tags-content","plugin_tags-image-generation","plugin_tags-seo","plugin_category-seo-and-marketing","plugin_contributors-bekyplugins","plugin_committers-orthoplex"],"banners":{"banner":"https:\/\/ps.w.org\/beky-ai-blog-generator\/assets\/banner-772x250.png?rev=3688332","banner_2x":false,"banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/beky-ai-blog-generator\/assets\/icon-128x128.gif?rev=3688474","icon_2x":false,"generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Beky AI Blog Generator adds a one-click AI assistant to the WordPress block editor. Includes the Beky Platform admin shell as an embedded library (no separate platform plugin required).<\/p>\n\n<p>Features:<\/p>\n\n<ul>\n<li>Generate complete blog drafts from a prompt or your post title<\/li>\n<li>Rewrite, summarize, translate, and add SEO meta in a click<\/li>\n<li>Generate images with DALL-E 3, FLUX, or Imagen \u2014 auto-sideloaded into the media library and set as the featured image<\/li>\n<li>Pick the model per operation (Haiku for speed, Sonnet for balance, Opus for quality)<\/li>\n<\/ul>\n\n<p>Subscription required for AI features. Plans start at $19\/month with a 30-day money-back guarantee. Manage everything from a single <strong>Beky<\/strong> dashboard provided by the platform.<\/p>\n\n<h3>Affiliation<\/h3>\n\n<p>Beky AI Blog Generator is a product of <a href=\"https:\/\/beky.io\/\">Beky<\/a>. Official site: <a href=\"https:\/\/beky.io\/\">beky.io<\/a>. Documentation: <a href=\"https:\/\/beky.io\/docs\">beky.io\/docs<\/a>. Support: support@beky.io<\/p>\n\n<h3>External services<\/h3>\n\n<h4>Beky API (api.beky.io)<\/h4>\n\n<p>This plugin is a Software-as-a-Service client. After you activate a license, it sends outbound HTTPS requests to <code>https:\/\/api.beky.io<\/code> for license validation, settings sync, credit balances, and AI operations. Data sent includes your license key, site URL, and the prompts\/post content you submit for drafts, rewrites, summaries, translations, SEO meta, and image generation. The Beky server forwards AI requests to the configured third-party model provider (for example Anthropic, OpenAI\/DALL-E 3, Black Forest Labs\/FLUX, or Google Imagen, depending on the model you select) to fulfil the request; provider API keys are stored encrypted on the server and are not logged. This connection is required for the plugin's AI features and runs whenever you use them. Terms: https:\/\/beky.io\/terms \u2014 Privacy: https:\/\/beky.io\/privacy<\/p>\n\n<h4>Brand &amp; topic page fetch (URLs you supply)<\/h4>\n\n<p>The Brand &amp; Voice color\/logo detector and the Content Pipeline's topic scraper make an outbound HTTP request to the page URL you provide (typically a page on your own site) to read its public HTML for context. The fetched HTML is processed locally and, for AI features, included in the prompt sent to the Beky API above. This runs only when you trigger brand detection or scrape a topic with an external URL.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate <strong>Beky AI Blog Generator<\/strong> (Platform is bundled inside the plugin).<\/li>\n<li>Open <strong>Beky<\/strong> in the WordPress admin sidebar to activate your license and configure settings.<\/li>\n<li>Visit <em>Beky \u2192 Licenses<\/em> and paste your AI Blog Generator license key.<\/li>\n<li>Open any post in the block editor \u2014 the Beky AI Blog Generator sidebar will appear.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20a%20separate%20beky%20platform%20plugin%3F\"><h3>Do I need a separate Beky Platform plugin?<\/h3><\/dt>\n<dd><p>No. Beky Platform is bundled inside Beky AI Blog Generator. After you activate the plugin, open <strong>Beky<\/strong> in the WordPress admin to manage licenses, settings, and credits.<\/p><\/dd>\n<dt id=\"is%20a%20subscription%20required%3F\"><h3>Is a subscription required?<\/h3><\/dt>\n<dd><p>Yes for AI features (drafts, rewrites, images, and the content pipeline). Activate a license under <em>Beky \u2192 Licenses<\/em>. Plans include a 30-day money-back guarantee. See https:\/\/beky.io for current pricing.<\/p><\/dd>\n<dt id=\"where%20do%20i%20generate%20a%20full%20blog%20post%3F\"><h3>Where do I generate a full blog post?<\/h3><\/dt>\n<dd><p>Use the <strong>Content Pipeline<\/strong> under <em>Beky \u2192 AI Blog Generator<\/em> to move a topic through outlines, draft content, WordPress draft, and publish. You can also generate and edit from the block editor sidebar on any post.<\/p><\/dd>\n<dt id=\"does%20generated%20content%20stay%20on%20my%20site%3F\"><h3>Does generated content stay on my site?<\/h3><\/dt>\n<dd><p>Yes. Drafts and images are saved in your WordPress database and media library. AI requests are processed via https:\/\/api.beky.io; see the External services section below.<\/p><\/dd>\n<dt id=\"which%20image%20models%20are%20supported%3F\"><h3>Which image models are supported?<\/h3><\/dt>\n<dd><p>Depending on your plan and settings, you can generate images with models such as DALL-E 3, FLUX, or Imagen. Generated images are sideloaded into the media library and can be set as the featured image.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.33<\/h4>\n\n<ul>\n<li>Default length slider now runs from 400 to 1,000 words in steps of 100, with min\/max labels and a live selected-value pill on the thumb.<\/li>\n<li>Site scrapes that have not changed are skipped so credits are not spent again.<\/li>\n<li>New Credit Log tab shows credit usage history in the plugin admin.<\/li>\n<\/ul>\n\n<h4>1.0.32<\/h4>\n\n<ul>\n<li>Release bump. Aligns plugin header, version constant, and WordPress.org stable tag.<\/li>\n<\/ul>\n\n<h4>1.0.30<\/h4>\n\n<ul>\n<li>WordPress.org review: fixed a <code>_load_textdomain_just_in_time<\/code> <code>_doing_it_wrong()<\/code> notice (WordPress 6.7+, only visible with WP_DEBUG on) caused by translating the admin menu label and two tab labels during <code>plugins_loaded<\/code>, before <code>init<\/code>. Those three labels are now translated lazily, only when actually displayed. No visible change to menu or tab text.<\/li>\n<\/ul>\n\n<h4>1.0.28<\/h4>\n\n<ul>\n<li>Security hardening: the plugin status, license check-in, settings sync, and audit\/log screens now require an administrator account instead of any logged-in author or editor, since they can expose or change account-wide licence, credit, and site-configuration data. Nothing changes for administrators.<\/li>\n<li>Fixed a fatal error on first-time activation (never surfaced when another Beky plugin was already active on the site, but always hit on a clean install): the embedded platform library wasn't finished loading yet when activation set up scheduled tasks.<\/li>\n<\/ul>\n\n<h4>1.0.27<\/h4>\n\n<ul>\n<li>Credits are now shown per site rather than per licence. If your plan covers several sites, the pool is divided between them and this screen shows what this site can spend, not the whole plan's balance.<\/li>\n<li>The account owner can set each site's share from their account page on the website. Changes take effect here on the next check-in.<\/li>\n<li>Running out of credits now says whether it was this site's share or the whole plan, instead of a generic failure. Autopilot and draft generation stop before they start rather than partway through a post.<\/li>\n<li>Authors and editors can now see the remaining credits in the toolbar. Previously only administrators could, and for everyone else the figure never updated.<\/li>\n<li>Fixed a toolbar figure that added up credits across separate licences, producing a number that belonged to none of them.<\/li>\n<\/ul>\n\n<h4>1.0.26<\/h4>\n\n<ul>\n<li>WordPress.org review fixes. Corrected the Plugin URI and the readme Contributors entry, and dropped the live word-by-word streaming of generated drafts so the plugin no longer makes raw cURL calls: \"Generate draft\" now disables the panel and shows a spinner until the finished draft arrives.<\/li>\n<li>Licensing, billing and settings endpoints now require <code>manage_network_options<\/code> when the plugin is network-active on multisite, instead of always accepting <code>manage_options<\/code>.<\/li>\n<li>Removed the install-time downgrade blocker that hooked WordPress's own plugin update process. The runtime safety check that refuses to boot older code against a newer database is unchanged.<\/li>\n<li>Database queries now pass table names as <code>%i<\/code> identifier placeholders through <code>$wpdb-&gt;prepare()<\/code> rather than building the SQL by string concatenation. No change to behaviour.<\/li>\n<\/ul>\n\n<h4>1.0.25<\/h4>\n\n<ul>\n<li>Topic Pool: the \"Scrape site\" button now shows the loading animation next to it for the duration of the scrape\/generate\/dedupe request, so it's clear the topic generation is still running.<\/li>\n<\/ul>\n\n<h4>1.0.24<\/h4>\n\n<ul>\n<li>Plugin Check: uninstall cleanup now goes through WP_Filesystem instead of a direct rmdir call, and the list-array helper no longer references array_is_list (PHP 8.1 \/ WordPress 6.5) so the plugin stays within its declared WordPress 6.2 minimum.<\/li>\n<\/ul>\n\n<h4>1.0.23<\/h4>\n\n<ul>\n<li>Fix fatal on activate: ABSPATH guards in namespaced files must come after the namespace declaration (PHP requirement).<\/li>\n<\/ul>\n\n<h4>1.0.22<\/h4>\n\n<ul>\n<li>Plugin Check hygiene: split bulk-action notice hook registration and moved ABSPATH guards to the top of flagged files so static compliance scanners no longer false-positive. No change to what users see.<\/li>\n<\/ul>\n\n<h4>1.0.21<\/h4>\n\n<ul>\n<li>Plugin Check hygiene: normalized every ABSPATH guard to the single-line form, and Beky Platform notices now render inside the Beky admin pages instead of hooking the global WP admin notice action, so they can never appear on another plugin's screen. No change to what users see.<\/li>\n<\/ul>\n\n<h4>1.0.20<\/h4>\n\n<ul>\n<li>Layout\/pipeline updates from latest-plugin-layout-changes plus Plugin Check hygiene: scoped Beky admin notices, per-user activation dismissal, autopilot failures to email + Beky \u2192 Logs, ABSPATH\/input sanitization.<\/li>\n<\/ul>\n\n<h4>1.0.19<\/h4>\n\n<ul>\n<li>WordPress.org review: uninstall now removes a plugin-owned uploads cache directory if one was ever created (defensive on-disk cleanup) and adds an ABSPATH guard alongside the WP_UNINSTALL_PLUGIN guard.<\/li>\n<\/ul>\n\n<h4>1.0.18<\/h4>\n\n<ul>\n<li>WordPress.org review: added a dedicated \"External services\" readme section disclosing the api.beky.io connection and admin-supplied URL fetches (brand detection, topic scrape), replacing the old Privacy section.<\/li>\n<\/ul>\n\n<h4>1.0.17<\/h4>\n\n<ul>\n<li>WordPress.org review: settings-save REST route now requires manage_options (admin-only), aligned with Beky Cache Pilot.<\/li>\n<\/ul>\n\n<h4>1.0.16<\/h4>\n\n<ul>\n<li>WordPress.org review: enqueue admin scripts\/styles (no loose script\/style tags); SSE stream relay documented; packaging aligned (main file, text domain, contributors, Plugin URI).<\/li>\n<\/ul>\n\n<h4>1.0.15<\/h4>\n\n<ul>\n<li>Renamed product to Beky AI Blog Generator for WordPress.org distribution (<code>beky-ai-blog-generator-1.0.15.zip<\/code>).<\/li>\n<li>Content Pipeline: Blog Draft card publish aligned with review modal; approve transition key fix.<\/li>\n<\/ul>\n\n<h4>1.0.13<\/h4>\n\n<ul>\n<li>Content Pipeline kanban: card-head reordered. Drag handle is back on the FAR RIGHT of each card, with the delete \u00d7 sitting flush to its left, so the row now reads [title] [\u00d7] [handle]. Retry icon, when present, injects between the title and the \u00d7 so all action controls cluster on the right edge.<\/li>\n<li>Content Pipeline kanban: approving an outline now also soft-rejects any other outlines for the same topic that were still in \"pending_review\". This fixes the duplicate-card ghost in \"Generated Outlines\": if a topic accumulated multiple generation attempts, only the approved one stays on the board after approval; the leftovers drop out cleanly (still queryable in the DB as status = \"rejected\" for audit purposes).<\/li>\n<\/ul>\n\n<h4>1.0.12<\/h4>\n\n<ul>\n<li>Content Pipeline kanban: softer pastel palette. Generated lanes (cols 1 + 3) are now neutral grey so visual emphasis falls on the actionable lanes; Approved lanes use a soft sky pastel, Blog Content \/ Blog Draft use a soft purple, and Blog Publish keeps a soft green.<\/li>\n<li>Content Pipeline kanban: approving an outline (col 3 -&gt; col 4 drag) now ONLY approves the outline \u2014 no draft is generated as a side effect. Draft generation is triggered separately on the col 4 -&gt; col 5 drag (which already calls the \/generate-draft endpoint). This removes the duplicate-card behavior where the same title used to appear in both Approved Outlines and Blog Content simultaneously.<\/li>\n<li>The bulk-approve action on the Blog Outlines admin screen, and the autopilot flow, continue to generate drafts inline as before \u2014 the change is scoped to the manual kanban path via a new opt-out flag on <code>Pipeline::approve_outline()<\/code>.<\/li>\n<\/ul>\n\n<h4>1.0.11<\/h4>\n\n<ul>\n<li>Content Pipeline kanban: stage-based column colors \u2014 amber for Generated lanes (Topics + Outlines), sky-blue for Approved lanes, indigo for Blog Content + Blog Draft, green for Blog Publish (replaces the previous per-column color scheme).<\/li>\n<li>Content Pipeline kanban: drag handle relocated to the LEFT of each card title; new per-card \u00d7 button on the right (soft-rejects via the existing reject endpoint \u2014 card vanishes from the board but the row stays in the DB as <code>status=rejected<\/code>). Hidden on Blog Publish.<\/li>\n<li>Content Pipeline kanban: per-column \"Clear all\" action on every column except Blog Publish \u2014 confirmation modal, hard-deletes every card in the column via the existing DELETE endpoints.<\/li>\n<li>Content Pipeline kanban: per-card retry control \u2014 when an AI step fails mid-drag (drafting 502s, missing credits, network blip), a small amber \u21bb icon now appears between the drag handle and the title so the same transition can be re-attempted without re-dragging.<\/li>\n<li>Fix: outline no longer disappears from \"Approved Outlines\" the instant it is approved. The auto-generated draft also creates a card in \"Blog Content\" as before, and the outline now stays visible in its lane regardless.<\/li>\n<\/ul>\n\n<h4>1.0.10<\/h4>\n\n<ul>\n<li>Settings page: Default Language is now a curated dropdown (English regional variants + 18 widely-supported LLM languages) instead of free text.<\/li>\n<li>Settings page: Image Style is now a curated dropdown of 10 themes (Photorealistic, Cinematic, Vivid, Digital painting, Watercolor, Anime, Cartoon, 3D render, Flat illustration, Minimalist).<\/li>\n<li>Settings page: every <code>&lt;select&gt;<\/code> now renders with a custom indigo chevron inside the box and the native OS arrow is hidden.<\/li>\n<li>Settings page: Discard Changes restored to a proper white secondary button (was rendering as a plain text link).<\/li>\n<li>Settings page: visual rhythm pass \u2014 Advanced Settings accordion spacing, Tone Presets help line removed, Model Selection labels neutralised, redundant IMAGE label removed under Image Generation Model.<\/li>\n<li>Brand &amp; Voice: red asterisks added next to Brand Identity and Tone Presets; Target Audience asterisk removed.<\/li>\n<li>Fix: opening the Advanced Settings accordion no longer collapses the 18px gap between fields (JS used to inline <code>display: block<\/code> which killed the flex layout \u2014 now resets to empty so CSS governs).<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Beky AI Blog Generator \u2013 AI writing for WordPress drafts, rewrites, SEO meta, translations, images, and a publish pipeline.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/sa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/342038","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/sa.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/sa.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=342038"}],"author":[{"embeddable":true,"href":"https:\/\/sa.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/orthoplex"}],"wp:attachment":[{"href":"https:\/\/sa.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=342038"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/sa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=342038"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/sa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=342038"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/sa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=342038"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/sa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=342038"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/sa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=342038"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}