=== Lumtera – WCAG, ADA, EAA & Section 508 Accessibility Checker ===
Contributors: mantrabrain
Tags: accessibility, wcag, ada, accessibility checker, section 508
Requires at least: 6.6
Tested up to: 7.1
Requires PHP: 8.1
Stable tag: 1.0.0
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Find WCAG 2.2 accessibility problems in your content as you write, with a plain-language fix for each one. Not an overlay.

== Description ==

Lumtera is an accessibility checker for WordPress. It checks your posts, pages and products against WCAG 2.2 level A and AA while you write, shows each problem it finds next to the block that caused it, and tells you how to fix it — often with a one-click fix.

It is **not an overlay**. Lumtera never adds a widget to your site or rewrites your pages for visitors. Overlays do not make a site compliant: in 2025 the US Federal Trade Commission ordered an overlay vendor to pay $1 million over claims that its tool made websites compliant. Lumtera helps *you* fix the content itself, which is what the WCAG, the ADA, the European Accessibility Act (EAA) and Section 508 actually ask for.

= Checks while you write =

* A sidebar in the block editor lists every issue Lumtera finds, re-checking a moment after you stop typing.
* **Quick fixes** repair mechanical problems in one click: skipped heading levels, empty headings, bold text that should be a heading, lists typed by hand, links that open a new tab without warning, tables without a header row and empty paragraphs used for spacing. Every fix can be undone like any edit.
* **Select block** jumps straight to the block with the problem. **Go to next issue** steps through them.
* Blocks with issues get a subtle outline in the editor, which each author can switch off.
* Images marked decorative (WordPress 7.1's "Mark as decorative", or Lumtera's **Decorative image** switch on older versions) are recognised, so a forgotten description is never mistaken for a deliberate one.
* Each issue explains why it matters, how to fix it in WordPress terms, and links to the WCAG success criterion.
* An optional pre-publish check lists errors before you publish, or asks the author to confirm before publishing anyway, even when WordPress's own pre-publish panel is switched off.

= 64 checks, built not to cry wolf =

Lumtera reports only what it can see in your content. Checks a machine cannot decide on its own are marked **Needs review**, not **Error**. Color contrast is checked only when both the text and background colors are set in the block, so your theme's CSS never causes a false alarm. 60 checks map to WCAG 2.2 level A or AA, including the new 2.2 criteria that can be seen in content (target size, redundant entry, accessible authentication); 4 are level AAA best practices, shown as tips.

* **Images:** missing alt text, file names or placeholder words used as alt text, "image of…", overly long alt text, image maps, image buttons, animated GIFs
* **Links and buttons:** empty links and icon-only links or buttons with no name (including linked images with empty alt), vague text such as "click here", the same text leading to different pages, web addresses used as link text, links that go nowhere, links to PDF and Office files, new tabs opened without warning, empty buttons, labels that don't match the visible text
* **Headings:** empty headings, skipped levels, an H1 inside the content, bold paragraphs that should be headings, very long headings
* **Forms:** fields without labels, including placeholder-only fields, fields with more than one label, radio and checkbox groups without a question, missing autocomplete on personal-data fields, the same email asked twice, password fields that block pasting or password managers, CAPTCHAs to check for an accessible alternative
* **Tables:** data tables without header cells, empty header cells, tables used for layout, empty rows
* **Audio and video:** audio without a transcript, autoplaying sound, looping video that cannot be paused, videos without captions, video embeds to confirm captions for, sliders and carousels that move on their own, embeds without titles, marquee and blink
* **Structure:** lists typed by hand with "-" or "1.", list items outside a list, empty paragraphs used for spacing, long content with no subheadings, emoji used as bullets or icons
* **Text:** justified text, very small text, long passages in capitals, underlined text that looks like a link
* **Color:** text contrast below 4.5:1 (3:1 for large text), using your theme.json palette
* **ARIA and keyboard:** hidden content that can still be focused, invalid roles, broken label references, duplicate IDs, positive tabindex, controls named only by a tooltip, in-page links to anchors that don't exist, embedded frames sharing a title, links and buttons that may be too small to tap
* **Language:** invalid language codes

= See issues on the live page =

**Review mode** outlines the issues on the published page itself. Open any post and choose **Accessibility** in the admin bar: each problem is outlined in place, with a panel that lists them and moves you to each one. Only logged-in users who can edit the post can open it; visitors never see or load any of it.

Its **Whole page** tab checks the page as your browser renders it, theme included: header, menus, footer and page-builder output. It measures real color contrast, and checks the page title and language, landmarks and the skip link, the heading outline, tap-target size, focus hidden behind sticky headers or cookie bars, removed focus outlines, links shown by color alone, blocked zoom and sideways scrolling. It only reads the page; nothing is changed.

= Optional site fixes, not an overlay =

Some problems come from the theme, not your content. Under Accessibility → Settings → Site fixes you can switch on small server-side fixes, each off by default and explained: a skip link, a visible keyboard focus ring, pinch-zoom re-enabled, underlined links in content, labels for WordPress's search and comment forms, "opens in a new tab" text for links that do, and file type and size on document links. They change the HTML every visitor receives in the same way; there is no widget and nothing rewrites the page in the browser. Fixing the theme itself is still better.

= Alt text manager =

Every image in your Media Library on one screen, with the ones that have no alt text or doubtful alt text first. Describe an image once and Lumtera offers to add the text to the posts that show it without any — it never replaces alt text someone already wrote, and it leaves images marked decorative alone.

= Optional AI help, on your terms =

Lumtera works fully without AI. If you want help, turn on **AI suggestions** under Accessibility → Settings → AI:

* **Suggest alt text** in the Alt text screen and the Image block. Lumtera sends the image *and where it is used* — the caption, nearby heading and text, the page title, and whether the image is a link — so the suggestion describes what the image means on that page, not just what it shows.
* **Suggest link text** for vague links ("click here"), web addresses used as link text, and links that share text with links elsewhere.
* **Suggest a heading** for bold text that works as a heading, or subheadings for long content that has none.
* **Draft a plain-language summary** when a post reads above the target grade.
* Each feature has its own switch, and each click is one request to your provider.
* Suggestions are drafts. Nothing is written until a person chooses one, edits it if needed, and saves. Accepted AI suggestions are recorded with who accepted them.
* It uses the AI provider you connected to WordPress (WordPress 7.0+, Settings → Connectors): for example OpenAI, Anthropic, Google, or a model running on your own server. Lumtera stores no API keys and runs no servers.

= Works with AI assistants =

On WordPress 6.9 and later, Lumtera registers its checks with the WordPress Abilities API. An AI assistant connected to your site (for example through the WordPress MCP Adapter) can check content, check a post, read the site summary and list the checks — with the same permissions a person would need in wp-admin.

= Site-wide report =

* An overview with your average automated score, errors, items needing review, and coverage.
* The most common issues across the site, and **the same issue on many pages** grouped together, so one fix in a template or pattern clears them all.
* A filterable content report: by issue, severity, content type or status, with each post's issues shown inline, or grouped by issue.
* An **Accessibility** column in your Posts and Pages lists, which you can sort by score.
* **Scan all content** runs in small batches, so it works within the time limits of any host.
* **WP-CLI:** `wp lumtera scan`, `check`, `stats`, `issues` and `rules`. `check` exits with an error code when it finds problems, and can write SARIF (for GitHub code scanning) or JUnit (for CI dashboards), so you can use it in a deployment pipeline.

= Also free =

* **Guided manual checks.** Step-by-step keyboard, zoom and reflow, text spacing, screen reader, forms, media, motion, hover and orientation checks in the editor, with results saved per page — for the part of WCAG no tool can test on its own.
* **Accessibility statement generator.** Creates a draft statement page following the structure of the W3C statement generator, with known limitations pre-filled from your own findings, and the sections the European Accessibility Act expects: feedback, enforcement procedure, disproportionate burden and review dates.
* **Reading level.** In English (Flesch–Kincaid), Spanish, French, German, Italian and Dutch, detected per post with Polylang or WPML, with tips when text gets hard to read.
* **Permissions.** Choose which roles see the reports, dismiss errors and use review mode.
* **Weekly email summary** (optional): score and change, top issues and pages that got worse, sent by your own site.
* **Dashboard widget.** Your score, errors and the pages that need attention on the WordPress Dashboard.
* **Any content type.** Posts, pages, WooCommerce products and custom post types, with no page limits or per-scan fees.
* **Works with block libraries.** Tested with the blocks of Spectra, Kadence Blocks, GenerateBlocks, Stackable, Otter and Essential Blocks.
* **Works with Elementor.** Elementor pages are checked from Elementor's own output, with a live panel inside the Elementor editor that checks unsaved changes and selects each widget.
* **Works with page builders and custom fields.** Divi, Beaver Builder, Bricks, Oxygen (classic) and WPBakery layouts are checked from their own output, and text, images and links in Advanced Custom Fields are checked with the post.
* **Works with the classic editor.** An Accessibility box below the content lists issues from the last save.

= Lumtera Pro =

[Lumtera Pro](https://store.mantrabrain.com/downloads/lumtera/) is an optional add-on. Everything listed above stays free; Pro adds:

* **Page checks for many pages** — any number of pages tested with your theme's real CSS, at desktop and phone width, plus scheduled daily or weekly checks as a logged-out visitor of your key pages and templates (home, archives, search, 404, shop, cart and checkout, found automatically).
* **PDF checks** — PDFs in your Media Library checked for tags, a title, a language, scanned pages without real text and restrictive encryption.
* **Monitoring** — email and Slack alerts when a publish introduces new errors, a weekly summary, and score history.
* **Fix tracking** — assign issues; tasks close themselves when a re-scan confirms the fix, with a full audit trail, and issues created in GitHub, GitLab, Jira or Linear.
* **Ignore everywhere** — ignore a repeated finding across the whole site, with a reason, an expiry and a log.
* **Integrations** — send events to Slack, Microsoft Teams or your own tools with signed webhooks.
* **Client reporting** — branded reports covering all 55 WCAG 2.2 A & AA criteria, PDF export (tagged when saved from Chrome or Edge), CSV export, white-label and an Accessibility Conformance Report in the VPAT 2.5 format filled from your automated and manual results (Freelancer plan and up).
* **Agency portfolio** — every client site on one dashboard, straight from their WordPress, and a network overview and network-wide license for multisite (Agency plan and up).

= Honest by design =

Automated testing finds only part of what WCAG covers; independent studies put it between a third and a half of real barriers. A score of 100 in Lumtera means "no automated issues found", never "compliant", and the dashboard gives you a five-minute manual checklist for the rest.

= Private and fast =

* Everything runs inside your own WordPress install. No account and no API key are needed, and Lumtera sends nothing to any outside service unless you turn on AI suggestions. The optional weekly summary is sent by your own site's email.
* Nothing runs for your visitors. Checks happen in the editor, when you save, and in review mode for logged-in editors.
* Dismissed issues stay dismissed across re-scans and updates, together with who dismissed them, when and why.

== Installation ==

1. Install Lumtera from **Plugins → Add New** and activate it.
2. Go to **Accessibility → Overview** and click **Scan all content**.
3. Open any post and click the Lumtera icon in the editor's top bar to see its issues.

== Frequently Asked Questions ==

= Will this make my site ADA or WCAG compliant? =

No tool can do that on its own, and you should be wary of any that claims to. Lumtera finds the problems automation can reliably detect in your content and tells you how to fix them. Compliance also needs manual testing and an accessible theme.

= Does it add anything to my site's front end? =

Not for visitors. Logged-in users who can edit a post can open review mode from the admin bar to see its issues on the page; that only loads for them, and only when they ask for it.

= Does it check my theme? =

Yes, one page at a time. The saved checks look at the content you write — blocks, classic content, page-builder layouts and shortcode output — so every result is something you can fix in the editor. Review mode's **Whole page** tab checks the page as rendered, theme included: contrast, landmarks, skip link, headings, target size, focus and zoom. Lumtera Pro checks many pages and templates on a schedule, as a logged-out visitor.

= Does Lumtera work with my page builder? =

Yes for Elementor, Divi 4 (Divi 5 layouts are blocks), Beaver Builder, Bricks, Oxygen 2–4 and WPBakery; each integration turns on when the builder is active. Oxygen 6 and Breakdance aren't supported yet. Values in Advanced Custom Fields (text, rich text, links, images, galleries and embeds, including repeaters, groups and flexible content) are checked with the post.

= Does Lumtera use AI? =

Only if you turn it on. AI suggestions are off by default, and every check works without them. When they are on, content is sent only when someone clicks "Suggest", and only to the AI provider you connected to WordPress. See "External services" below.

= Does the Alt text screen change my posts? =

Only when you ask it to. After you describe an image, Lumtera lists the posts that show it without alt text and adds the description to them when you click the button. Alt text that already exists is never replaced, each change is saved as a revision, and posts you cannot edit are skipped.

= Can I turn off a check, or make it stricter? =

Yes. Under **Accessibility → Settings**, you can set any check to Error, Needs review, Tip or Off.

= Who can dismiss an issue? =

Anyone who can edit a post can dismiss items that need review. Dismissing an error needs an editor or administrator by default. Change who can under **Accessibility → Settings → Permissions** (developers can also use the `lumtera_dismiss_errors_capability` filter).

= Does it work with the classic editor? =

Yes. The classic editor gets an Accessibility check box below the content that lists issues from the last save.

== External services ==

Lumtera does not contact any external service by default.

= AI provider you connect (optional) =

If an administrator turns on any AI suggestion under Accessibility → Settings → AI, Lumtera uses the WordPress AI Client and the AI provider connected under Settings → Connectors (for example OpenAI, Anthropic, Google, or a local model server). Lumtera stores no API keys and runs no servers of its own.

What is sent, and only when a user clicks a button for that feature (each feature is off until an administrator turns it on):

* "Suggest alt text": the image file, its file name and caption, and — from a post that uses the image and that the user can read — the post title, the nearest heading, the nearby text and whether the image is a link.
* "Suggest link text" (block editor): the link text, where the link points as site and page path only (no query string, fragment, email address or phone number), the sentence and paragraph around the link, the post title, and the title of the linked page when it is a public page on the same site.
* "Suggest heading" and "Suggest subheadings" (block editor): the post title and the bold line with the text after it and the heading before it; or, for subheadings, the text of the post's paragraphs, lists and quotes.
* "Draft a plain-language summary" (block editor, when content reads above the target grade): the post title and the visible text of the post as it is in the editor, up to about 3,000 words.

These requests can only be made by people who can edit the post. Each click is one request to your provider, which may charge for it. Nothing is sent for visitors or in the background.

The provider's own terms and privacy policy apply, for example:

* OpenAI: [terms](https://openai.com/policies/terms-of-use/), [privacy policy](https://openai.com/policies/privacy-policy/)
* Anthropic: [terms](https://www.anthropic.com/legal/consumer-terms), [privacy policy](https://www.anthropic.com/legal/privacy)
* Google Gemini API: [terms](https://ai.google.dev/gemini-api/terms), [privacy policy](https://policies.google.com/privacy)

AI suggestions are drafts. They are never applied without a person's approval and do not make a site compliant on their own.

== Screenshots ==

1. The Accessibility sidebar in the block editor: every issue with why it matters, how to fix it, and one-click fixes.
2. Review mode: issues outlined on the live page, with a panel that moves you to each one.
3. The site overview: average score, errors, items to review and the most common issues.
4. The content report, filterable by issue, severity, content type and status.
5. The alt text manager: describe an image once and add the text to the posts that use it.
6. Checks inside the Elementor editor, including unsaved changes.
7. Settings: turn any check off, or make it stricter or softer.
8. The accessibility statement generator.

== Changelog ==

= 1.0.0 =
* 64 checks mapped to WCAG 2.2, built to avoid false alarms: checks a machine cannot decide are marked "Needs review".
* Block editor sidebar with live checks, one-click quick fixes, jump-to-block, outlines, a Decorative image switch, dismiss with a reason, and a pre-publish check.
* Review mode: issues outlined on the live page for logged-in editors, plus whole-page checks of the rendered page (contrast, landmarks, headings, target size, focus, zoom, reflow).
* Optional server-side site fixes for common theme problems (skip link, focus ring, zoom, link underlines, form labels, new-tab and document-link text), off by default.
* Accessibility statement generator with EAA sections: feedback, enforcement procedure, disproportionate burden and review dates.
* Guided manual checks with results saved per page.
* Same issue on many pages grouped in the content report and overview.
* Page builders and custom fields: Divi, Beaver Builder, Bricks, Oxygen, WPBakery and Advanced Custom Fields.
* AI writing help (optional): link text, headings and a plain-language summary.
* Permissions settings, an optional weekly email summary, and reading level in six languages.
* WP-CLI SARIF and JUnit output for CI.
* Optional AI alt text suggestions through the WordPress AI Client, reviewed by a person before saving.
* WordPress Abilities API integration so AI assistants can run Lumtera's checks.
* Personal data export and erase support for dismissals.
* Alt text manager for the Media Library.
* Elementor: pages are checked from Elementor's own output, with a live panel inside the Elementor editor.
* Works with Spectra, Kadence Blocks, GenerateBlocks, Stackable, Otter and Essential Blocks, the classic editor and shortcodes.
* WooCommerce: product descriptions and short descriptions are checked.
* Site overview, filterable content report, sortable list-table column and dashboard widget.
* WP-CLI commands, including a check with exit codes for deployment pipelines.
* Colour contrast from block and theme.json colours; reading level for English content.
* Accessibility statement generator following the W3C statement structure.
* "Lumtera Reporter" role for read-only access by an agency hub.
* Multisite support, including clean uninstall across a network.

== Upgrade Notice ==

= 1.0.0 =
First stable release.
