{"id":321013,"date":"2026-06-04T08:08:18","date_gmt":"2026-06-04T08:08:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/ai-multitool-bulk-alt-text-seo-meta-auto-translate-excerpt-generator-with-your-own-ai-key\/"},"modified":"2026-06-05T06:35:04","modified_gmt":"2026-06-05T06:35:04","slug":"tonioweb-ai-content-generator","status":"publish","type":"plugin","link":"https:\/\/cn.wordpress.org\/plugins\/tonioweb-ai-content-generator\/","author":23401951,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.3.1","stable_tag":"1.3.1","tested":"7.0","requires":"7.0","requires_php":"8.0","requires_plugins":null,"header_name":"TonioWeb AI Content Generator","header_author":"TonioWeb","header_description":"Bring your own OpenAI, Claude or Gemini key. Bulk-generate alt text, SEO meta descriptions, translations and excerpts via the WordPress 7.0 Connector API.","assets_banners_color":"0f1b34","last_updated":"2026-06-05 06:35:04","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/tonioweb.ro","rating":0,"author_block_rating":0,"active_installs":0,"downloads":335,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.2":{"tag":"1.0.2","author":"toply","date":"2026-06-04 08:11:20"},"1.0.3":{"tag":"1.0.3","author":"toply","date":"2026-06-04 17:07:05"},"1.0.4":{"tag":"1.0.4","author":"toply","date":"2026-06-04 17:15:45"},"1.0.5":{"tag":"1.0.5","author":"toply","date":"2026-06-04 17:20:56"},"1.0.6":{"tag":"1.0.6","author":"toply","date":"2026-06-04 17:27:38"},"1.0.7":{"tag":"1.0.7","author":"toply","date":"2026-06-04 20:51:08"},"1.0.8":{"tag":"1.0.8","author":"toply","date":"2026-06-04 21:00:49"},"1.0.9":{"tag":"1.0.9","author":"toply","date":"2026-06-04 21:07:45"},"1.1.0":{"tag":"1.1.0","author":"toply","date":"2026-06-04 21:11:15"},"1.1.1":{"tag":"1.1.1","author":"toply","date":"2026-06-04 21:12:46"},"1.1.2":{"tag":"1.1.2","author":"toply","date":"2026-06-04 21:14:59"},"1.1.3":{"tag":"1.1.3","author":"toply","date":"2026-06-04 21:46:33"},"1.1.4":{"tag":"1.1.4","author":"toply","date":"2026-06-04 22:00:52"},"1.1.5":{"tag":"1.1.5","author":"toply","date":"2026-06-04 22:08:02"},"1.1.6":{"tag":"1.1.6","author":"toply","date":"2026-06-04 22:13:38"},"1.1.7":{"tag":"1.1.7","author":"toply","date":"2026-06-04 22:16:22"},"1.1.8":{"tag":"1.1.8","author":"toply","date":"2026-06-04 22:23:12"},"1.1.9":{"tag":"1.1.9","author":"toply","date":"2026-06-04 22:27:04"},"1.2.0":{"tag":"1.2.0","author":"toply","date":"2026-06-04 22:30:04"},"1.2.1":{"tag":"1.2.1","author":"toply","date":"2026-06-04 22:37:16"},"1.2.2":{"tag":"1.2.2","author":"toply","date":"2026-06-05 05:51:13"},"1.3.0":{"tag":"1.3.0","author":"toply","date":"2026-06-05 06:22:17"},"1.3.1":{"tag":"1.3.1","author":"toply","date":"2026-06-05 06:35:04"}},"upgrade_notice":{"1.0.8":"<ul>\n<li>Added: setup guide card on Dashboard when no API key is configured \u2014 explains the 3 steps and links directly to Settings \u2192 Connectors.<\/li>\n<li>Changed: readme.txt rewritten to highlight bulk processing differentiators vs WordPress built-in AI.<\/li>\n<\/ul>","1.0.7":"<p>Scan results now show enriched item details with paginated selection \u2014 update to preview what will be processed before starting any bulk job.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3560490,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3560490,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3560511,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3560511,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.2","1.0.3","1.0.4","1.0.5","1.0.6","1.0.7","1.0.8","1.0.9","1.1.0","1.1.1","1.1.2","1.1.3","1.1.4","1.1.5","1.1.6","1.1.7","1.1.8","1.1.9","1.2.0","1.2.1","1.2.2","1.3.0","1.3.1"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Dashboard \u2014 overview of all features, active providers, and recent job history.","2":"Bulk Alt Text Generator \u2014 scan results with thumbnail preview, current alt text, and per-item selection before starting the job.","3":"AI SEO Meta Generator \u2014 scan results with post titles and current meta, selectable per item.","4":"Auto-Translate \u2014 language selector, source\/target post pairing, Polylang\/WPML detection.","5":"Excerpt Generator \u2014 content-type aware excerpt generation with per-item selection.","6":"Provider Routing \u2014 assign OpenAI, Claude, or Gemini to each feature with fallback chain.","7":"WordPress 7.0 Connectors integration \u2014 zero key management inside the plugin."}},"plugin_section":[],"plugin_tags":[2353,17214,3236,186,286],"plugin_category":[34,48,55],"plugin_contributors":[259546],"plugin_business_model":[],"class_list":["post-321013","plugin","type-plugin","status-publish","hentry","plugin_tags-ai","plugin_tags-alt-text","plugin_tags-bulk","plugin_tags-seo","plugin_tags-woocommerce","plugin_category-accessibility","plugin_category-language-tools","plugin_category-seo-and-marketing","plugin_contributors-toply","plugin_committers-toply"],"banners":{"banner":"https:\/\/ps.w.org\/tonioweb-ai-content-generator\/assets\/banner-772x250.png?rev=3560511","banner_2x":"https:\/\/ps.w.org\/tonioweb-ai-content-generator\/assets\/banner-1544x500.png?rev=3560511","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/tonioweb-ai-content-generator\/assets\/icon-128x128.png?rev=3560490","icon_2x":"https:\/\/ps.w.org\/tonioweb-ai-content-generator\/assets\/icon-256x256.png?rev=3560490","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>TonioWeb AI Content Generator does what WordPress's built-in AI cannot: <strong>process your entire site in bulk, in the background, while you do something else.<\/strong><\/p>\n\n<p>WordPress 7.0 added AI writing assistance inside the editor \u2014 great for one post at a time. TonioWeb AI Content Generator is for the other problem: you have 3 000 products without alt text, 800 posts without meta descriptions, a media library full of unnamed images. You need results in minutes, not weeks.<\/p>\n\n<h4>Why not just use WordPress's built-in AI?<\/h4>\n\n\n\n\n  \n  WordPress editor AI\n  TonioWeb AI Content Generator\n\n\n\n\n  Works on\n  One post at a time\n  Entire site at once\n\n\n  Alt text\n  Not supported\n  Full Media Library, WCAG 2.2\n\n\n  SEO meta\n  Not supported\n  Writes to Yoast, Rank Math, AIOSEO, SEOPress\n\n\n  Translation\n  Not supported\n  Polylang &amp; WPML native adapters\n\n\n  Background processing\n  No\n  Action Scheduler queue, resumable\n\n\n  Provider choice per feature\n  No\n  OpenAI for alt text, Claude for translations, Gemini for excerpts \u2014 your call\n\n\n  Fallback provider\n  No\n  Automatic failover if primary is rate-limited\n\n\n  Undo \/ rollback\n  No\n  7-day rollback log, per-item undo\n\n\n  WooCommerce products\n  Basic\n  Titles, descriptions, attributes, custom fields\n\n\n\n\n<h4>How It Works<\/h4>\n\n<ol>\n<li>Get an API key from OpenAI, Anthropic or Google (all offer pay-as-you-go, no monthly subscription required)<\/li>\n<li>Add the key in <strong>WordPress Settings \u2192 Connectors<\/strong> \u2014 this is a built-in WordPress 7.0 feature for managing AI provider credentials<\/li>\n<li>Open <strong>TonioWeb AI Content Generator<\/strong> from the admin menu<\/li>\n<li>Scan, preview the items found, select which ones to process, and run the bulk job<\/li>\n<\/ol>\n\n<p>That's it. No separate account, no credit card for this plugin, no data sent to our servers \u2014 everything goes directly between your site and the AI provider you chose.<\/p>\n\n<h4>Features<\/h4>\n\n<p><strong>\ud83d\uddbc\ufe0f Bulk AI Alt Text Generator<\/strong>\nScan your entire Media Library and generate accessible alt text for every image using AI vision. WCAG 2.2 compliant, multilingual, SEO-optimized. Preview thumbnails before generating. Skip images that already have alt text or force-regenerate selected ones. Undo per-image or in bulk. Works on thousands of images \u2014 not just the one currently open in the editor.<\/p>\n\n<p><strong>\ud83d\udcdd AI SEO Meta Description Generator<\/strong>\nGenerate 155-character SEO meta descriptions for all your posts, pages and products at once. Writes directly into Yoast SEO, Rank Math, All in One SEO, and SEOPress fields \u2014 your SEO plugin stays in control of display. Bulk-process your entire archive in one job.<\/p>\n\n<p><strong>\ud83c\udf0d AI Auto-Translate<\/strong>\nTranslate posts, pages, products, taxonomies, and custom fields into 100+ languages. Native Polylang and WPML adapter \u2014 translations go to the right language slots automatically. Not a simple word-for-word translation: the AI adapts tone for natural reading in the target language.<\/p>\n\n<p><strong>\u2702\ufe0f AI Excerpt Generator<\/strong>\nReplace empty or auto-truncated excerpts with engaging 1\u20133 sentence summaries across your entire site. Content-type detection adapts tone automatically: news, e-commerce, blog, tutorial, product page.<\/p>\n\n<p><strong>\u2699\ufe0f Multi-Provider Routing with Fallback<\/strong>\nAssign a different AI provider to each feature. Use Gemini for alt text (cheapest per image), Claude for translations (best quality), GPT-4o for meta descriptions. Set a fallback provider per feature \u2014 if your primary hits a rate limit, the job continues without interruption.<\/p>\n\n<p><strong>\u21a9\ufe0f Full Rollback &amp; Undo<\/strong>\nEvery bulk operation is logged. Undo a single item or roll back an entire job up to 7 days later. No risk of irreversible changes.<\/p>\n\n<p><strong>\ud83d\udd0c WordPress 7.0 Connector Native<\/strong>\nZero key management inside the plugin. Uses the Connector registry already built into WordPress 7.0 \u2014 one place for all your AI credentials across the whole site.<\/p>\n\n<h4>Who Should Use This Plugin?<\/h4>\n\n<ul>\n<li><strong>WooCommerce stores<\/strong> with hundreds or thousands of products that need alt text, meta descriptions, and translations<\/li>\n<li><strong>Content sites<\/strong> with a large archive of legacy posts missing SEO meta or excerpts<\/li>\n<li><strong>Agencies &amp; freelancers<\/strong> onboarding new client sites \u2014 fill in all the missing content fields in one session<\/li>\n<li><strong>Multilingual sites<\/strong> using Polylang or WPML that need translations without a SaaS subscription<\/li>\n<li><strong>Accessibility-focused publishers<\/strong> who need WCAG\/EAA-compliant alt text across their entire Media Library<\/li>\n<\/ul>\n\n<h4>Supported AI Providers<\/h4>\n\n<p>TonioWeb AI Content Generator reads provider credentials from the WordPress 7.0 Connectors registry. Currently supported:<\/p>\n\n<ul>\n<li><strong>OpenAI<\/strong> \u2014 GPT-4o, GPT-4.5, GPT-5 and Vision models for alt text<\/li>\n<li><strong>Anthropic Claude<\/strong> \u2014 Claude 4.x for translations and long-form excerpts<\/li>\n<li><strong>Google Gemini<\/strong> \u2014 Gemini 2.x for cost-efficient bulk processing<\/li>\n<\/ul>\n\n<p>Additional providers will be supported as WordPress 7.x ships new Connector packages.<\/p>\n\n<h4>Privacy &amp; Data Handling<\/h4>\n\n<p>TonioWeb AI Content Generator is a thin orchestration layer. It sends your content directly from your WordPress site to the AI provider you selected, using YOUR API key. <strong>We never see, store, or proxy your data.<\/strong> No telemetry. No analytics. No phone-home.<\/p>\n\n<h4>Source Code<\/h4>\n\n<p>The plugin PHP source code is in <code>src\/<\/code>. The React admin UI source is in <code>admin\/src\/<\/code>. The compiled admin bundle (<code>admin\/build\/<\/code>) is generated with <code>@wordpress\/scripts<\/code>. To rebuild: <code>npm install &amp;&amp; npm run build<\/code>.<\/p>\n\n<!--section=installation-->\n<h4>Automatic Installation<\/h4>\n\n<ol>\n<li>Log into your WordPress admin<\/li>\n<li>Navigate to <strong>Plugins \u2192 Add New<\/strong><\/li>\n<li>Search for <strong>\"TonioWeb AI Content Generator\"<\/strong><\/li>\n<li>Click <strong>Install Now<\/strong>, then <strong>Activate<\/strong><\/li>\n<li>Make sure you have at least one provider key in <strong>Settings \u2192 Connectors<\/strong> (OpenAI, Claude, or Gemini)<\/li>\n<li>Go to <strong>TonioWeb AI Content Generator<\/strong> in the admin menu and run your first bulk task<\/li>\n<\/ol>\n\n<h4>Manual Installation<\/h4>\n\n<ol>\n<li>Download the <code>tonioweb-ai-content-generator.zip<\/code> file<\/li>\n<li>Go to <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong><\/li>\n<li>Select the zip file and click <strong>Install Now<\/strong><\/li>\n<li>Click <strong>Activate<\/strong><\/li>\n<\/ol>\n\n<h4>First-Time Setup (60 seconds)<\/h4>\n\n<ol>\n<li>Open <strong>Settings \u2192 Connectors<\/strong> in WordPress 7.0<\/li>\n<li>Add at least one provider: OpenAI, Anthropic, or Google<\/li>\n<li>Paste your API key (get one at platform.openai.com, console.anthropic.com, or aistudio.google.com)<\/li>\n<li>Go to <strong>TonioWeb AI Content Generator \u2192 Dashboard<\/strong><\/li>\n<li>Pick a feature, scan your site, select the items you want to process, and start the bulk job<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20is%20this%20different%20from%20wordpress%27s%20built-in%20ai%20writing%20tools%3F\"><h3>How is this different from WordPress's built-in AI writing tools?<\/h3><\/dt>\n<dd><p>WordPress 7.0 added AI assistance inside the block editor \u2014 useful for drafting or rewriting a single post. TonioWeb AI Content Generator is built for a different problem: processing your entire existing site in bulk. It handles alt text for your whole Media Library, SEO meta descriptions for all your posts, and translations through Polylang\/WPML \u2014 all as background jobs you can start, pause, and resume. The editor AI and TonioWeb AI Content Generator complement each other.<\/p><\/dd>\n<dt id=\"do%20i%20need%20a%20paid%20openai%2Fclaude%2Fgemini%20account%3F\"><h3>Do I need a paid OpenAI\/Claude\/Gemini account?<\/h3><\/dt>\n<dd><p>You need at least one provider API key. All three (OpenAI, Anthropic, Google) offer pay-as-you-go pricing with no monthly minimum. You'll typically spend $0.001\u2013$0.005 per item processed (e.g., 1 000 alt text generations = ~$1\u2013$5 total).<\/p><\/dd>\n<dt id=\"does%20tonioweb%20ai%20content%20generator%20work%20with%20wordpress%206.x%3F\"><h3>Does TonioWeb AI Content Generator work with WordPress 6.x?<\/h3><\/dt>\n<dd><p>No. It requires the Connector API introduced in WordPress 7.0. The plugin will not activate on older versions.<\/p><\/dd>\n<dt id=\"does%20it%20conflict%20with%20yoast%20seo%2C%20rank%20math%2C%20all%20in%20one%20seo%2C%20or%20seopress%3F\"><h3>Does it conflict with Yoast SEO, Rank Math, All in One SEO, or SEOPress?<\/h3><\/dt>\n<dd><p>No \u2014 it writes to the meta keys those plugins read from, so they stay in control of display. You can keep your current SEO plugin and use TonioWeb AI Content Generator to fill in missing data faster.<\/p><\/dd>\n<dt id=\"will%20it%20overwrite%20my%20existing%20alt%20text%20or%20meta%20descriptions%3F\"><h3>Will it overwrite my existing alt text or meta descriptions?<\/h3><\/dt>\n<dd><p>By default, no. It skips items that already have content unless you enable <strong>\"Force regenerate\"<\/strong>. Every bulk operation has per-item Undo and a 7-day global rollback.<\/p><\/dd>\n<dt id=\"can%20i%20use%20different%20ai%20providers%20for%20different%20features%3F\"><h3>Can I use different AI providers for different features?<\/h3><\/dt>\n<dd><p>Yes. The Routing tab lets you use Gemini for alt text (cheapest), Claude for translations (best quality), and GPT-4o for excerpts. You can also set a fallback provider per feature.<\/p><\/dd>\n<dt id=\"how%20does%20it%20handle%20rate%20limits%20and%20large%20libraries%3F\"><h3>How does it handle rate limits and large libraries?<\/h3><\/dt>\n<dd><p>Bulk operations run through the WordPress Action Scheduler queue \u2014 processed in background batches with automatic backoff when the provider returns 429. You can pause, resume, or cancel any running job from the Dashboard.<\/p><\/dd>\n<dt id=\"is%20my%20content%20sent%20anywhere%20besides%20my%20chosen%20ai%20provider%3F\"><h3>Is my content sent anywhere besides my chosen AI provider?<\/h3><\/dt>\n<dd><p>No. TonioWeb AI Content Generator is a direct client between your WordPress site and the AI provider you configured. No server, no proxy, no telemetry.<\/p><\/dd>\n<dt id=\"does%20it%20support%20multilingual%20translation%20for%20woocommerce%20products%3F\"><h3>Does it support multilingual translation for WooCommerce products?<\/h3><\/dt>\n<dd><p>Yes. Titles, short descriptions, long descriptions, attribute labels, and custom fields. Works with Polylang and WPML by writing to the correct language slots.<\/p><\/dd>\n<dt id=\"is%20there%20a%20pro%20version%3F\"><h3>Is there a Pro version?<\/h3><\/dt>\n<dd><p>A Pro tier is planned with: per-feature scheduled re-runs, custom prompt templates, brand-voice profiles, CSV import\/export, and multi-site network manager. The core features will always remain in the free plugin.<\/p><\/dd>\n<dt id=\"what%20if%20a%20new%20ai%20provider%20launches%3F\"><h3>What if a new AI provider launches?<\/h3><\/dt>\n<dd><p>When WordPress core or a third party ships a new Connector package, TonioWeb AI Content Generator auto-detects it \u2014 no update needed.<\/p><\/dd>\n<dt id=\"does%20this%20work%20for%20accessibility%20compliance%20%28wcag%2C%20eaa%29%3F\"><h3>Does this work for accessibility compliance (WCAG, EAA)?<\/h3><\/dt>\n<dd><p>The alt text generator produces descriptive, contextual alt text aligned with WCAG 2.2 criterion 1.1.1 and EAA requirements. The output is a draft \u2014 you remain responsible for final review. TonioWeb AI Content Generator dramatically reduces the time to bring a large site into compliance.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20my%20data%20if%20i%20uninstall%20the%20plugin%3F\"><h3>What happens to my data if I uninstall the plugin?<\/h3><\/dt>\n<dd><p>The uninstall routine removes all plugin database tables, options, and scheduled tasks. Your actual content \u2014 alt text, meta descriptions, excerpts, translations \u2014 is written to standard WordPress fields and stays on your site permanently.<\/p><\/dd>\n<dt id=\"is%20the%20plugin%20gpl-compatible%3F\"><h3>Is the plugin GPL-compatible?<\/h3><\/dt>\n<dd><p>Yes. GPLv2 or later. You can audit, modify, fork, or rebrand the code subject to GPL terms.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.3.1<\/h4>\n\n<ul>\n<li>Fixed: Rollback page now correctly lists jobs (MySQL strict mode GROUP BY fix + UTC_TIMESTAMP).<\/li>\n<li>Fixed: job item details show full output text without truncation.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Added: Rollback \/ Undo page \u2014 undo entire jobs or individual items within the retention window.<\/li>\n<li>Fixed: Settings now load from and save to the database (were showing hardcoded defaults).<\/li>\n<li>Fixed: Dashboard auto-refreshes every 3 seconds while any job is pending or running.<\/li>\n<li>Fixed: Job status labels \u2014 \"running\" now shows as \"Running\" (was missing from the map).<\/li>\n<li>Added: Scan limit control on each feature page (default 500, adjustable 1\u20135000).<\/li>\n<li>Added: Per-item detail view in Dashboard (expand \u25bc button per job row).<\/li>\n<li>Added: Retry button for jobs with failed items \u2014 resets failed items to pending and re-enqueues.<\/li>\n<\/ul>\n\n<h4>1.2.2<\/h4>\n\n<ul>\n<li>Removed: temporary debug connector endpoint and UI button \u2014 no longer needed.<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Added: after starting a bulk job, plugin redirects to Dashboard and shows a success notice.<\/li>\n<li>Added: Clear Log button removes all completed\/failed\/cancelled jobs from the list.<\/li>\n<li>Added: delete button on each job row for individual removal.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Fixed: API key is now correctly read from the WordPress option set by the Connector plugin (authentication.setting_name), resolving all \"Could not extract API key\" errors on WP 7.0 sites.<\/li>\n<\/ul>\n\n<h4>1.1.9<\/h4>\n\n<ul>\n<li>Fixed: ConnectorBridge now handles wp_get_connector() returning an array (not an object), correctly extracting the API key for direct HTTP calls.<\/li>\n<li>Improved: Connector debug endpoint now shows array keys with masked values.<\/li>\n<\/ul>\n\n<h4>1.1.8<\/h4>\n\n<ul>\n<li>Added: \"Inspect Google Connector\" button in Dashboard shows the internal connector structure \u2014 used to diagnose API key extraction on this WP build.<\/li>\n<\/ul>\n\n<h4>1.1.7<\/h4>\n\n<ul>\n<li>Added: internal debug endpoint for connector structure inspection (admin-only).<\/li>\n<\/ul>\n\n<h4>1.1.6<\/h4>\n\n<ul>\n<li>Fixed: plugin now works when WordPress 7.0 AI Client (wp_ai_client) is unavailable \u2014 falls back to direct HTTPS calls to Google, OpenAI and Anthropic using the key stored in Connectors.<\/li>\n<\/ul>\n\n<h4>1.1.5<\/h4>\n\n<ul>\n<li>Added: Dashboard shows exact API error message under each failed job for easier diagnosis.<\/li>\n<\/ul>\n\n<h4>1.1.4<\/h4>\n\n<ul>\n<li>Added: Dashboard jobs table now shows Succeeded and Failed counts separately for easier diagnosis.<\/li>\n<li>Fixed: Pending jobs are automatically re-enqueued via WP-Cron if Action Scheduler async trigger failed.<\/li>\n<\/ul>\n\n<h4>1.1.3<\/h4>\n\n<ul>\n<li>Fixed: bulk jobs no longer stay stuck in \"Queued\" \u2014 the missing Action Scheduler handler is now registered so items are dispatched and processed automatically.<\/li>\n<li>Fixed: failed items in alt text generation now correctly increment the processed counter so jobs reach \"Completed\" status.<\/li>\n<\/ul>\n\n<h4>1.0.8<\/h4>\n\n<ul>\n<li>Added: setup guide card on Dashboard when no API key is configured \u2014 explains the 3 steps and links directly to Settings \u2192 Connectors.<\/li>\n<li>Changed: readme.txt rewritten to highlight bulk processing differentiators vs WordPress built-in AI.<\/li>\n<\/ul>\n\n<h4>1.0.7<\/h4>\n\n<ul>\n<li>Added: scan results now show enriched item details (thumbnail, filename, current alt text for images; post title, type, current meta\/excerpt for posts).<\/li>\n<li>Added: paginated item table (50 per page) with checkboxes \u2014 select individual items or all; bulk job starts only for selected items.<\/li>\n<li>Added: \"Start bulk job (X selected)\" button shows the count of selected items.<\/li>\n<\/ul>\n\n<h4>1.0.6<\/h4>\n\n<ul>\n<li>Fixed: ConnectorBanner no longer flashes briefly on page load while providers are still being fetched.<\/li>\n<li>Added: \"Cancel all pending\" button on Dashboard to cancel queued jobs in bulk.<\/li>\n<\/ul>\n\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>Fixed: fatal TypeError when wp_get_connector() returns an array instead of an object \u2014 method_exists() now only called for objects.<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Fixed: critical error in admin when WordPress 7.0 AI client API throws exception for unconfigured providers; all wp_ai_client() and wp_get_connector() calls are now wrapped in try\/catch.<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Fixed: provider availability check now correctly detects unconfigured providers, preventing bulk jobs from starting without a working AI connection.<\/li>\n<li>Fixed: bulk-start buttons disabled and warning notice shown when no provider is configured, with direct link to Settings \u2192 Connectors.<\/li>\n<li>Changed: @wordpress\/scripts upgraded to 32.4.0.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Fixed: text domain updated to tonioweb-ai-content-generator across all PHP files.<\/li>\n<li>Fixed: WordPress.org directory assets removed from plugin package.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Changed: plugin renamed to TonioWeb AI Content Generator; slug and REST namespace updated.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<li>Bulk AI Alt Text Generator with Vision API support across OpenAI, Anthropic, and Google providers.<\/li>\n<li>AI SEO Meta Description Generator compatible with Yoast, Rank Math, All in One SEO, and SEOPress.<\/li>\n<li>AI Auto-Translate for posts, pages, products, taxonomies, and custom fields in 100+ languages.<\/li>\n<li>AI Excerpt Generator with content-type detection and tone adaptation.<\/li>\n<li>Native WordPress 7.0 Connector API integration \u2014 no key storage inside the plugin.<\/li>\n<li>Per-feature provider routing with fallback chain.<\/li>\n<li>Action Scheduler bundled as a production dependency.<\/li>\n<li>Per-item Undo and 7-day global rollback for every bulk operation.<\/li>\n<li>WP-CLI commands: wp aim alt-text bulk, wp aim seo-meta bulk, wp aim translate bulk, wp aim excerpt bulk.<\/li>\n<\/ul>","raw_excerpt":"Bulk AI for your entire site: generate alt text, SEO meta, translations and excerpts for hundreds of items at once \u2014 not just the post you have open.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/321013","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=321013"}],"author":[{"embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/toply"}],"wp:attachment":[{"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=321013"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=321013"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=321013"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=321013"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=321013"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=321013"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}