About this plugin
Ananyoo Accessible Forms builds contact and lead forms that conform to WCAG 2.2 Level AA out of the box. Instead of bolting accessibility on afterwards, every form is generated with correct semantics from the start: a real <label> for every control, fieldset / legend for grouped inputs, an error summary that takes focus, inline errors tied to their field with aria-describedby and aria-invalid , and a status region that announces success. Developed by Shivaji Mitra (M/S. Anblik). Live demo: Try the accessible forms demo » Why this plugin? Most popular form plugins can be made accessible, but they do not start that way — you have to know exactly which settings to change and which markup to fix. This plugin makes the accessible result the default, so a form added by a non-expert is still usable by keyboard and screen-reader visitors, on the smallest phone, in high-contrast mode. Key features Accessible by construction — label per field, fieldset/legend for radio and checkbox groups, required state exposed to assistive tech. Error summary with managed focus — on a failed submit, an role="alert" summary lists each problem as a link to the field, and focus moves to it (WCAG 2.2 SC 3.3.1, 2.4.3). Values kept on error — visitors never retype a whole form because one field failed (SC 3.3.7 Redundant Entry). Accessible anti-spam, no puzzles — an invisible honeypot plus a submission-time trap stop bots without a CAPTCHA, satisfying SC 3.3.8 Accessible Authentication. Optional Akismet and Cloudflare Turnstile support adds more protection when you want it. Multi-step forms — split a long form into short, numbered steps with a “Step break”. Each step is announced, focus is managed, and the form still works as one page without JavaScript. File uploads, off by default — add a File upload field, but nothing can be uploaded until you switch uploads on. Per-field size and allowed-type limits, with strict server-side checks on size, extension and real content. Live accessibility health check — a panel beside the builder reviews the form as you edit and flags issues (missing labels, empty steps, choice fields without options, and more) with a symbol and a word, never colour alone. Accessible email notifications — the admin notification and the visitor’s confirmation are built as accessible HTML email: a real data table with row headings, an alt-text logo and a plain-text alternative for every inbox. Pick one of six ready-made palettes (every band WCAG AAA) or set your own header, body and footer colours with a live contrast check, choose HTML or plain text only, and set the wording on each form. Know where a submission came from — an optional sender & device details section adds the time, the sender’s IP address (linked to a location look-up you can click), browser, operating system, device type, language and the pages involved to the notification you receive. Off until you switch it on, never added to the visitor’s confirmation, and no data leaves your site. Reusable forms — each form is stored once and can be placed on many pages by ID. Stored entries — every submission is saved so nothing is lost if an email fails. List, search, trash and restore using the native WordPress screens. Resend a notification — if a notification never arrived, re-send it from the entry screen or straight from the Entries list. It is rebuilt from the stored entry through the same code as the original, so it arrives identical; the person who submitted is not emailed again. The dashboard matches the inbox — the entry screen shows the same sender & device details as the email, so there is one version of the truth. Spam quarantine — suspected spam is moved to a recoverable Spam view, not deleted, so false positives can be restored. Block and shortcode — insert the Accessible Form block, or use [ananyoo_form id="123"] anywhere, just like a classic contact form. Any-SMTP delivery — notifications are sent through wp_mail() , so any SMTP plugin you already use handles deliverability. Brand it from the admin screen — set the submit button, focus ring and example-text colours under Form appearance. Every pair is contrast-checked live at the right threshold (4.5:1 for text, 3:1 for the focus ring), and the hover shade is derived for you. Under the surface each one is a CSS custom property on .aaf-form , so a theme can restyle the form by redeclaring tokens rather than fighting the stylesheet with !important . Example text that behaves — an optional placeholder on free-text fields, fenced so it cannot do harm: never on a field without a label, never the accessible name, and set to a colour that passes contrast instead of the browser’s pale grey. The health panel warns if it repeats the label or reads as an instruction. 3 px focus ring, 44 × 44 targets — meets WCAG 2.2 SC 2.4.11/2.4.13 and 2.5.8 by default (both adjustable). Reflows cleanly at 320 px , respects prefers-reduced-motion , and supports Windows High Contrast / forced-colors . Works without JavaScript — the server validates and re-renders; JavaScript only enhances focus handling and adds an early client-side check. Clean uninstall option — off by default (your data is kept). Turn it on to remove every form, entry and setting when the plugin is deleted. Links Plugin home & documentation Live demo More accessibility plugins from Ananyoo — further WordPress accessibility plugins are in active development. Support & contact Privacy This plugin stores the entries you receive in your own WordPress database and sends notification emails through your site’s own mail system (the standard wp_mail() function). Out of the box it sends your data to no third-party service and adds no tracking or front-end links of its own. Two optional extras change this, and both are your choice: Akismet (off until you switch it on). When enabled, the submitted values, along with the sender’s IP address and browser user agent, are sent to Akismet to be checked for spam. This uses the Akismet plugin’s own connection and API key, under Automattic’s privacy policy . Please mention this in your own privacy policy before switching it on. Cloudflare Turnstile . The separate companion plugin you choose handles that request under its own terms.