AI Share & Summarize — Full changelog For each release, see the entries below. The latest version is always at the top. The current release notes also live in readme.txt under "== Changelog ==". = 2.2.2 = * Improved: Caches are refreshed right after an automatic summary is generated, so it shows up without waiting for a page cache to expire. New `ayudawp_aiss_summary_generated` action lets cache plugins purge the affected URLs. * Fix: The automatic AI summary was not generated when a scheduled post went live (and could be missed on some interrupted publishes) on certain hosts. It is now generated reliably as soon as the post publishes, with self-healing on the first view and a daily rescue sweep as safety nets. * Fix: In the classic editor, emptying the manual summary field left the content hash behind, so automatic generation never refilled it. The hash is now cleared too. = 2.2.1 = * Improved: the "Automatic" model setting now uses each provider's cheapest model (Haiku on Anthropic) instead of a mid-tier one, and keeps the rest of the provider's catalog as an ordered fallback chain, so summaries stay cheap and keep working when a model is unavailable. * Fix: AI summaries could stop generating after the active provider changed its available models — a listed model that is not actually usable, or a corrupted cached model list on sites with a persistent object cache. Generation now degrades to the next model and refreshes the cached model list automatically instead of failing until the cache expires. * Fix: corrected the summary "content types" help text, which claimed to be fully independent from the share buttons list while it actually falls back to that list when left empty. = 2.2.0 = * New: AI model selector for the summary. Pick the provider and model used for generation, or leave it on Automatic to use a fast, cost-effective model per provider instead of the newest, most expensive flagship. * Improved: AI Summary generation is now a single, explicit mode selector (AI with extractive fallback / AI only / Extractive only / Disabled), replacing the two checkboxes. Extractive-only is now a real choice without removing your AI provider. * Fix: summaries could fail when the configured provider's newest model was not available to your account (for example a limited-access flagship). Generation now defaults to a sensible model and no longer breaks in that case. * Fix: prevented a possible fatal error during analytics cleanup on WordPress older than 6.1, so the minimum is now WordPress 6.1. The AI summary needs WordPress 7.0; on earlier versions you can still use the extractive summary. = 2.1.1 = * Improved: Background (cron) AI summary generation now retries transient provider errors — e.g. a malformed API response — up to 2 times with a short backoff before falling back to the extractive summarizer. Editor- and visitor-triggered generation still fails fast. The retry count is filterable via `ayudawp_aiss_ai_retry_attempts`, and the stored error now reports how many attempts were made. * Improved: The "Settings > Connectors" link in the AI Summary settings section now opens in a new tab so you keep the plugin settings page open. * Fix: Bare video/oEmbed URLs (YouTube, Vimeo, X...) placed on their own line or paragraph to embed a player no longer leak into the AI and extractive summaries. The content cleanup now mirrors WordPress core's autoembed detection and removes them before summarizing; linked URLs and URLs written inside a sentence are preserved. Note: already-stored summaries are not regenerated by the update — edit the post or use "Regenerate now" on affected posts. = 2.1.0 = * New: Summary block appearance — choose a style for the inline AI summary block and its Generate button (minimal, outline, brand, dark, or custom colors), set the background and text colors, and place the icon on the left, on the right, or hidden. * New: Customizable summary text — set your own label for the summary block heading and for the visitor-facing "Generate AI summary" button (both translatable; leave empty to keep the defaults). * Improved: The AI summary now renders each sentence on its own line for easier reading, for both the AI Client and the extractive providers. * Improved: Summary accessibility — visible keyboard focus on the block toggle and the Generate button, and focus moves to the freshly generated summary so screen readers announce the new content. * Fix: The summary in the "before content" position did not appear on sites whose theme, plugins or snippets rewrite `the_content` with `DOMDocument` (image optimizers, lazy-load, "nofollow" on image links, table-of-contents, etc.), which dropped the block when reserializing the content. The before-content summary is now injected after those filters and its critical CSS is printed in the page `
`, so the block survives; the share buttons keep their position. * Fix: Hardening — the section/title tag is now built through an allowlist helper (closing the class of the 2.0.x XSS against future refactors), the activation-notice dismissal now also verifies the user capability, and a redundant `unserialize()` was removed from the SEO noindex detection. = 2.0.4 = * Fix: Contributor+ stored XSS through the `title_style` attribute of the `[ayudawp_share_buttons]` shortcode. The value was emitted in HTML tag-name position with only `esc_attr()`, which does not encode spaces or `=`, so a user with the `edit_posts` capability could inject arbitrary attributes and event handlers. `title_style` is now validated against an allowlist (`h2`-`h6`, `p`, `span`, `div`) at every entry point (admin save, shortcode attribute, render). Reported by Haitam Lazaar. = 2.0.3 = * Fix: Buttons not appearing on entries without a manual excerpt when the active theme or a third-party plugin calls `the_excerpt()` / `get_the_excerpt()` from the `` to compose Open Graph, Twitter Card or similar meta descriptions. WordPress's `wp_trim_excerpt()` applies the `the_content` filter internally to auto-truncate posts without a manual excerpt — the 1.9.2+ id-match guard accepted that early invocation as legitimate, marked the post as processed and blocked the subsequent real call from the post template. The filter now early-returns and stays out of the processed-posts guard when running inside the excerpt pipeline. = 2.0.2 = * Fix: Buttons not appearing on entries other than the latest published post on themes/plugins that call `setup_postdata()` from a header/sidebar without a matching `wp_reset_postdata()`. The strict id-match guard added in 1.9.2 (for Divi Theme Builder, FSE and Bricks) now falls back to verifying that the filtered content belongs to the queried post when `get_the_ID()` and `get_queried_object_id()` disagree, so legitimate singular content still gets the buttons while widgets and footers running `the_content` on arbitrary text remain protected. = 2.0.1 = * Fix: Visitor-facing "Generate AI summary" click made the summary box look empty until the page was reloaded — the placeholder element was being replaced by the inline critical CSS `