{"id":377853,"date":"2026-09-30T01:23:48","date_gmt":"2026-09-30T01:23:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/a11y-ledger\/"},"modified":"2026-10-02T15:41:14","modified_gmt":"2026-10-02T15:41:14","slug":"lumadro-accessibility-ledger","status":"publish","type":"plugin","link":"https:\/\/de.wordpress.org\/plugins\/lumadro-accessibility-ledger\/","author":23576372,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.1.2","stable_tag":"0.1.2","tested":"7.1.2","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"Lumadro Accessibility Ledger","header_author":"Lumadro","header_description":"Keeps a dated, append-only record of your accessibility work: the WCAG 2.1 AA failures found, every change made, who approved it, and what was not checked. Drafts alt text with your own AI key; every change is reviewed and can be undone. Not an overlay. Does not make a site legally compliant.","assets_banners_color":"1a3178","last_updated":"2026-10-02 15:41:14","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wpstore.lumadro.com\/accessibility-ledger\/","header_author_uri":"https:\/\/wpstore.lumadro.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":93,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.1.1":{"tag":"0.1.1","author":"lumadro","date":"2026-09-30 01:23:33","revision":3720122},"0.1.2":{"tag":"0.1.2","author":"lumadro","date":"2026-10-02 15:41:14","revision":3725074}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3720122,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3720122,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3720122,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3720122,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3720122,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.1.1","0.1.2"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3720122,"resolution":"1","location":"assets","locale":"","width":1280,"height":800},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3720122,"resolution":"2","location":"assets","locale":"","width":1280,"height":800},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3720122,"resolution":"3","location":"assets","locale":"","width":1280,"height":800},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3720122,"resolution":"4","location":"assets","locale":"","width":1280,"height":800},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3720122,"resolution":"5","location":"assets","locale":"","width":1280,"height":800}},"screenshots":{"1":"The change log: every change with its before, after, date, approver and source.","2":"The report, with coverage limits inside the document.","3":"The review screen, with provenance warnings on text a person wrote.","4":"The browser check running on a checkout page.","5":"The coverage screen, listing all 50 criteria and their status."}},"plugin_section":[],"plugin_tags":[1953,209467,17214,8533,1956],"plugin_category":[34],"plugin_contributors":[283543],"plugin_business_model":[],"class_list":["post-377853","plugin","type-plugin","status-publish","hentry","plugin_tags-accessibility","plugin_tags-accessibility-checker","plugin_tags-alt-text","plugin_tags-audit","plugin_tags-wcag","plugin_category-accessibility","plugin_contributors-lumadro","plugin_committers-lumadro"],"banners":{"banner":"https:\/\/ps.w.org\/lumadro-accessibility-ledger\/assets\/banner-772x250.png?rev=3720122","banner_2x":"https:\/\/ps.w.org\/lumadro-accessibility-ledger\/assets\/banner-1544x500.png?rev=3720122","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/lumadro-accessibility-ledger\/assets\/icon.svg?rev=3720122","icon":"https:\/\/ps.w.org\/lumadro-accessibility-ledger\/assets\/icon.svg?rev=3720122","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/lumadro-accessibility-ledger\/assets\/screenshot-1.png?rev=3720122","caption":"The change log: every change with its before, after, date, approver and source."},{"src":"https:\/\/ps.w.org\/lumadro-accessibility-ledger\/assets\/screenshot-2.png?rev=3720122","caption":"The report, with coverage limits inside the document."},{"src":"https:\/\/ps.w.org\/lumadro-accessibility-ledger\/assets\/screenshot-3.png?rev=3720122","caption":"The review screen, with provenance warnings on text a person wrote."},{"src":"https:\/\/ps.w.org\/lumadro-accessibility-ledger\/assets\/screenshot-4.png?rev=3720122","caption":"The browser check running on a checkout page."},{"src":"https:\/\/ps.w.org\/lumadro-accessibility-ledger\/assets\/screenshot-5.png?rev=3720122","caption":"The coverage screen, listing all 50 criteria and their status."}],"raw_content":"<!--section=description-->\n<p>Lumadro Accessibility Ledger finds specific WCAG 2.1 AA failures, helps you fix\nthem in your actual content, and writes every step into an append-only ledger\nyou can export: each finding with the success criterion it fails, each change\nwith its before and after, the date, who approved it, and where the text came from.<\/p>\n\n<p>The European Accessibility Act has applied since 28 June 2025 to many products\nand services sold to consumers in the EU, online shops among them. Its technical\nreference is WCAG 2.1 level AA. When someone asks what you have done about\naccessibility, the answer should be a document, not a feeling.<\/p>\n\n<p><strong>It does not make your site legally compliant, and no plugin can.<\/strong> It is\n<strong>not an overlay<\/strong>: it adds nothing to the front end and changes the underlying\ncontent, not what visitors see at runtime.<\/p>\n\n<h4>The ledger<\/h4>\n\n<ul>\n<li>Every accepted change is recorded with the date, the text before and after,\nwho approved it, and where the text came from: the AI provider that drafted\nit, the image's existing media library alt text, or a person.<\/li>\n<li>Append-only: an undo is added as a new entry; nothing is erased.<\/li>\n<li>When a later scan no longer finds a problem, the ledger records it as \"no\nlonger detected\", never as proof of a fix: the content may simply have changed.<\/li>\n<li>A downloadable report lists open findings by success criterion and page,\ncounts confirmed failures apart from items for a person to review, and\nincludes the change log and what the checks did not cover. It never says the\nsite is conformant, accessible or compliant.<\/li>\n<\/ul>\n\n<h4>How it finds problems<\/h4>\n\n<p><strong>Site scan.<\/strong> Reads every published post, page and library image in the\nbackground, and loads each published page once to check what the theme adds:<\/p>\n\n<ul>\n<li>Images with no alt attribute, and alt text that is really a file name<\/li>\n<li>Links and buttons with no accessible name, including icon-only ones<\/li>\n<li>Form fields with no label, and frames with no title<\/li>\n<li>Headings that skip a level, and pages with no h1<\/li>\n<li>A missing or malformed page language, and missing or placeholder page titles<\/li>\n<li>Data tables with no header cells, and positive tabindex values<\/li>\n<\/ul>\n\n<p><strong>Browser check.<\/strong> Loads your pages in your own browser tab and runs the open\nsource axe-core engine: computed colour contrast, and content JavaScript builds\nafter loading, such as a block checkout. It then probes sideways scrolling at\n320 pixels wide, elements with no visible change on focus, clickable elements a\nkeyboard cannot reach, and content opened on focus that Escape does not close.\nThese are listed for review, never as proven failures. Each run starts with the\nhome and shop pages, then pages never checked, so repeated runs cover the site.<\/p>\n\n<h4>How it fixes them<\/h4>\n\n<p>AI drafts alt text using your own provider key through WordPress core's AI\nClient: no credits and no per-fix charges; you pay your provider directly.\nScanning, the browser check and the reports need no AI at all.<\/p>\n\n<p>A library image's alt text is used wherever it is placed from then on. An image\nalready placed in a post is fixed in that post, with a normal post revision.<\/p>\n\n<h4>Nothing changes without you<\/h4>\n\n<ul>\n<li>A draft is only a draft until you accept it, and you can edit it first.<\/li>\n<li><strong>Text a person wrote is never replaced silently.<\/strong> Replacing it needs a\ndeliberate tick on that item. In a post, an image someone marked decorative\n(alt=\"\") counts as a person's decision too.<\/li>\n<li>Every change can be undone. If someone has edited the text since, the undo\nrefuses rather than discarding their edit.<\/li>\n<\/ul>\n\n<h4>Lumadro Accessibility Ledger Pro<\/h4>\n\n<p>The free plugin is complete for fixing and recording work one item at a time.\nPro, a separate paid plugin, adds bulk accept and reject (still never replacing\ntext a person wrote), scheduled re-scans with a dated history, JSON and CSV\nexports, a drafted accessibility statement, a multisite network overview and a\nportfolio of your separate sites.<\/p>\n\n<h4>How much of WCAG this covers<\/h4>\n\n<p>The site scan checks 10 of the 50 WCAG 2.1 level A and AA success criteria; the\nbrowser check partly checks a few more on the pages it loads. The rest need a\nperson, and the plugin names every one on its \"Coverage and limits\" screen and\nin every report. Passing the automated checks does not mean your site conforms.<\/p>\n\n<h3>External services<\/h3>\n\n<p><strong>Your AI provider (optional).<\/strong> Drafting alt text uses the provider you connect\nyourself under Settings &gt; Connectors, through WordPress core's AI Client. Only\nwhen you ask for drafts, the plugin sends the provider the image (the file from\nyour media library, or its public URL on your own site), the image's file name,\ncaption, description and current alt text, and the title, language and nearby\ntext of the published page it appears on. Nothing from password-protected or\nprivate content is sent, nor files in WooCommerce's or Easy Digital Downloads'\nprotected download folders (the lumadro_ledger_private_upload_folders filter\nadds others). Nothing is sent while\nscanning, running the browser check or building reports, or if no provider is\nconnected. The provider's own terms and privacy policy apply (for example\nhttps:\/\/openai.com\/policies\/, https:\/\/www.anthropic.com\/legal or\nhttps:\/\/policies.google.com\/).<\/p>\n\n<p>If WordPress's AI Client has no provider and the separate AI Services plugin\nhas one, drafting uses that instead, sending the same text but not the image,\nonly when you ask for drafts, under that provider's terms.<\/p>\n\n<p><strong>No licensing or update service.<\/strong> This plugin contains no licensing code and\ncontacts no licensing or update service; it updates from WordPress.org like any\nother plugin.<\/p>\n\n<p>The site scan only fetches your own site's pages, and axe-core runs in your own\nbrowser; neither contacts an outside service.<\/p>\n\n<h3>Third-party libraries<\/h3>\n\n<ul>\n<li>axe-core 4.13.0 by Deque Systems, Mozilla Public License 2.0.\nSource: https:\/\/github.com\/dequelabs\/axe-core\nBundled unmodified in assets\/vendor\/axe-core and loaded only into your own\npages during a browser check started from the admin screen.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin.<\/li>\n<li>Open Lumadro Accessibility Ledger and scan the whole site. No AI or setup needed.<\/li>\n<li>Run the browser check. For a shop, put a product in your cart first so the\ncheckout form is checked.<\/li>\n<li>To draft alt text, add your own provider key under Settings &gt; Connectors\n(WordPress 7.0 or later), then draft from the review screen.<\/li>\n<li>Review every draft, then download the report from the \"Report\" screen.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20it%20make%20my%20site%20eaa%20or%20ada%20compliant%3F\"><h3>Does it make my site EAA or ADA compliant?<\/h3><\/dt>\n<dd><p>No, and be suspicious of anything that says it does. Compliance is a legal\njudgement about your whole service. This plugin documents specific technical\nfixes; that may be useful evidence of effort. It is not a certificate and it is\nnot legal advice.<\/p><\/dd>\n<dt id=\"does%20it%20check%20colour%20contrast%2C%20keyboard%20access%20and%20focus%3F\"><h3>Does it check colour contrast, keyboard access and focus?<\/h3><\/dt>\n<dd><p>Partly, through the browser check, on the pages it loads, in one desktop-width\nview. Text over images is listed for you to check by eye. It does not press the\nTab key, so keyboard traps and focus order still need a person.<\/p><\/dd>\n<dt id=\"will%20it%20overwrite%20alt%20text%20i%20wrote%20myself%3F\"><h3>Will it overwrite alt text I wrote myself?<\/h3><\/dt>\n<dd><p>Not unless you explicitly choose to, one item at a time. Pro's bulk accept\ncannot touch text a person wrote either.<\/p><\/dd>\n<dt id=\"does%20the%20browser%20check%20send%20my%20pages%20anywhere%3F\"><h3>Does the browser check send my pages anywhere?<\/h3><\/dt>\n<dd><p>No. axe-core is bundled and runs in your browser, on your own site's pages.<\/p><\/dd>\n<dt id=\"who%20can%20use%20it%3F\"><h3>Who can use it?<\/h3><\/dt>\n<dd><p>Editors and administrators can read the change log and download the report,\nwhich cover the whole site, and review drafts for content they can edit.\nScanning, drafting, the browser check and settings are for administrators.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20my%20data%20if%20i%20delete%20the%20plugin%3F\"><h3>What happens to my data if I delete the plugin?<\/h3><\/dt>\n<dd><p>By default the change log and scan history stay, because they are your\nevidence. An administrator can choose to delete them on deletion. Alt text\nalready written is never removed.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.1.2<\/h4>\n\n<ul>\n<li>Fixed: the browser check no longer flags inactive items of tab lists, menus and similar groups (such as WooCommerce's product tabs) as unreachable by keyboard when another item of the group is in the Tab order, the pattern where the arrow keys move between items. The report says this is assumed, not tested.<\/li>\n<li>Fixed: browser-check results are labelled \"Browser check\" on the Findings screen.<\/li>\n<li>The dashboard names pages a scan could not load, and links to the findings.<\/li>\n<li>Plainer wording on the dashboard and review screens.<\/li>\n<li>The report shows the titles of public pages and images, and approvers' chosen display names, next to their ids.<\/li>\n<li>Open findings and \"no longer detected\" entries on content that is not confirmed as public show only its type and id, not its address or details. The change log still records the alt text before and after each change. Markup from the browser check, which runs while you are signed in, stays on the Findings screen and is left out of the report and exports.<\/li>\n<\/ul>\n\n<h4>0.1.1<\/h4>\n\n<ul>\n<li>First public release.<\/li>\n<\/ul>","raw_excerpt":"A dated record of your site&#039;s accessibility work: what failed, what changed, who approved it, and what was not checked.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/de.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/377853","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/de.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/de.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/de.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=377853"}],"author":[{"embeddable":true,"href":"https:\/\/de.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/lumadro"}],"wp:attachment":[{"href":"https:\/\/de.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=377853"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/de.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=377853"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/de.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=377853"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/de.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=377853"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/de.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=377853"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/de.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=377853"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}