WordPress and WooCommerce accessibility Accessibility fixes, in your theme code
- header.php skip linklandmarks
- footer.php landmarksheadings
- searchform.php search label
- functions.php WooCommerce hooksnotices
- style.css focus styles
- js/
- navigation.js menu keyboard
- woocommerce/
- cart/
- cart.php classic cart
- checkout/
- form-checkout.php classic checkout
- single-product/add-to-cart/
- variable.php variation dropdowns
- global/
- quantity-input.php quantity input
- cart/
What we fix most on WordPress
| Component | How it usually fails | WCAG 2.2 SC | Where it lives |
|---|---|---|---|
| Cart drawer and mini-cart | Opens without moving focus; Tab escapes behind it; nothing announces the add | 2.1.1, 2.4.3, 4.1.2, 4.1.3 | Theme JS, woocommerce/cart/mini-cart.php |
| Variation selectors and swatches | <div>s with no role, name, state or tab stop | 2.1.1, 4.1.2, 1.4.1 | woocommerce/single-product/add-to-cart/variable.php, or a swatches plugin |
| Header and menus | Submenus open on hover only; no expanded state, no Escape | 2.1.1, 1.4.13 | header.php, theme JS, or the Navigation block |
| Pop-ups and newsletter | Focus not moved into the pop-up; no Escape; not announced as a dialog | 2.1.1, 2.4.3, 4.1.2 | Pop-up plugin or theme template |
| Product cards | Quick-add buttons with no name; focus invisible | 4.1.2, 2.4.7 | woocommerce/content-product.php |
| Forms | Placeholder-only labels; errors not tied to fields or not announced | 3.3.2, 3.3.1, 4.1.3 | Form plugin settings or form template |
| Page-builder output | Headings, buttons, tabs and accordions: headings chosen by size, controls with no name or state | 1.3.1, 4.1.2 | Page-builder settings and page content |
| Color tokens | Muted text and sale badges under 4.5:1 | 1.4.3 | style.css, theme.json, theme settings |
A fix is a change to code, not a script on top
This is the actual change for issue KC-009 on our demo store: three clickable <div>s became a native radio group. Keyboard, screen readers and the visual checked state all come from the markup, so nothing has to run on top of the page.
<div class="swatches">- <div class="swatch selected" data-color="Forest" style="background:#2f4a3a"></div>- <div class="swatch" data-color="Slate" style="background:#4a5563"></div>- <div class="swatch" data-color="Ember" style="background:#b4532a"></div>+ <input type="radio" class="swatch-input visually-hidden" name="color" id="color-forest" value="Forest" checked>+ <label for="color-forest" class="swatch" style="background:#2f4a3a"><span class="visually-hidden">Forest</span></label>+ <input type="radio" class="swatch-input visually-hidden" name="color" id="color-slate" value="Slate">+ <label for="color-slate" class="swatch" style="background:#4a5563"><span class="visually-hidden">Slate</span></label>How access works
Who: You
Add a named user for us on staging
Only the access the job needs. Never a shared admin login.
Who: We
Work in a child theme
Your existing child theme, or a new one on staging, so updates don’t overwrite the fixes.
Who: We
Fix and verify on staging
Before/after scans, then keyboard, VoiceOver, NVDA and zoom.
Who: You
Preview it and read the report
You pay the balance only after you’ve seen the fixes.
Who: You
Deploy
You or your developer push staging to live, or we do on your written go-ahead.
Plugins, cart and checkout
- We fix it
Your theme
Child-theme templates, WooCommerce template overrides, hooks, CSS and small scripts: menus, product pages, cart and checkout templates, pop-ups you control, forms and color tokens.
- Flagged with options
Plugins
Issues inside a plugin’s own code, including WooCommerce’s Cart and Checkout blocks, are flagged with options:
- change a setting
- swap the plugin
- file a ticket with the developer, with the details they need
- Quoted individually
Page builders
Sites built mainly with Elementor, Divi or another page builder are quoted individually.
WooCommerce cart and checkout templates are theme code, so they can be in scope. Sites built mainly with page builders such as Elementor or Divi are quoted individually.
Review + Fix packages
Starter
Price: $1,750
Quick Review (3 templates) plus up to 5 fixes
- Quick Review
- Up to 5 fixes on staging
- Verified before/after report
- 60-day fix window
Fixes delivered 5 business days after you approve the fix plan
Book Starter, Review + FixEssentials
Our recommendation for a typical small store
Price: $4,250
Essentials Review (6 templates) plus up to 15 fixes
- Essentials Review
- Up to 15 fixes on staging
- Verified before/after report with keyboard and screen reader recordings of key tasks
- 60-day fix window
Fixes delivered 10 business days after you approve the fix plan
Book Essentials, Review + FixStandard
Price: $7,750
Standard Review (12 templates) plus up to 30 fixes
- Standard Review
- Up to 30 fixes on staging
- Verified before/after report with recordings
- 60-day fix window
Fixes delivered 15 business days after you approve the fix plan
Book Standard, Review + Fix
Agencies: white-label at 20% below these prices (details). Auditors: you audit, we fix, your team retests, pay on pass (details).
How you can hold us to it
A verified report
For every issue ID: the file we changed, automated before/after results at desktop and mobile widths, and the manual keyboard and screen reader result.
Pay the balance after you’ve seen it
The last payment is due only after you’ve checked the fixes on staging.
A 60-day fix window
If anything we fixed stops working within 60 days, we fix it again at no charge.
A refund if a fix can’t pass
If an agreed fix doesn’t pass its agreed check and we can’t fix it within 10 business days, we refund that fix’s share of the price.
Questions store owners ask
Could this break my store?
We work only on a duplicate theme or a staging site, and your live store isn’t touched. Before handoff we check that add to cart, the cart, checkout entry, search and forms still work, and you review everything on staging before anything is published.
Do you use an overlay or accessibility widget?
No. We change your theme or template code. Overlays add a script on top and don’t fix the code that causes the problems.
What do you need from us?
Your store’s address and a collaborator request approval (Shopify) or a staging login (WordPress). We never ask for passwords. For Review + Fix, we also need 20 minutes to walk through the fix plan with you.
Can you fix WooCommerce cart and checkout?
WooCommerce cart and checkout templates are theme code, so they can be in scope. Sites built mainly with page builders such as Elementor or Divi are quoted individually.
Do you promise legal compliance?
We fix the agreed issues to WCAG 2.2 AA and prove it with a before/after report. We don’t promise compliance with the ADA or any law, or any outcome of a demand letter or lawsuit, and this isn’t legal advice.
Book Review + Fix
Fixed price, fixes in a child theme on staging, verified report, 60-day fix window.