File size: 18,545 Bytes
28e500e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40594f2
 
28e500e
 
 
 
 
 
 
 
 
 
 
 
 
 
40594f2
28e500e
 
40594f2
 
 
 
 
 
 
28e500e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<!doctype html><html lang="en"><head><meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>ADA Compliance Plugin for WordPress: Title II Grievance Form</title><meta name="description" content="Accessible grievance form for US public entities. 28 CFR 35.107: 50+ employees must publish one. Under 50,000 population: WCAG 2.1 AA April 26, 2027.">
<style>:root{color-scheme:light dark}
body{font:16px/1.55 system-ui,-apple-system,"Segoe UI",sans-serif;margin:0;padding:22px;
 max-width:1000px;margin-inline:auto}
h1{font-size:1.4rem;margin:0 0 .3rem}.sub{opacity:.78;margin:0 0 1.2rem}
.wrap{display:grid;gap:24px;grid-template-columns:1fr 1fr}
@media(max-width:820px){.wrap{grid-template-columns:1fr}}
label{display:block;font-weight:600;margin:.7rem 0 .2rem;font-size:.92rem}
input,select,textarea{width:100%;padding:.5rem .6rem;font:inherit;border:1px solid #8886;
 border-radius:7px;background:transparent;color:inherit}
.card{border:1px solid #8884;border-radius:11px;padding:18px}
.buy{margin-top:20px;border:1px solid #8884;border-radius:11px;padding:16px}
.buy a{display:inline-block;margin-top:.6rem;padding:.55rem 1rem;border:1px solid currentColor;
 border-radius:8px;text-decoration:none;color:inherit;font-weight:600}</style><script data-grow-initializer="">!(function(){window.growMe||((window.growMe=function(e){window.growMe._.push(e);}),(window.growMe._=[]));var e=document.createElement("script");(e.type="text/javascript"),(e.src="https://faves.grow.me/main.js"),(e.defer=!0),e.setAttribute("data-grow-faves-site-id","U2l0ZTphZjljMzgyMC0yMmU5LTRhYjgtYTIxNS03OTRhMGY1N2ExYzM=");var t=document.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t);})();</script>
<!--yj-canon-s101--><link rel="canonical" href="https://getreadystack.com/tools/wordpress-ada-compliance-plugin">

<script type="application/ld+json" data-yj="yj-capsule-v1">{"@context": "https://schema.org", "@type": "FAQPage", "inLanguage": "en", "mainEntity": [{"@type": "Question", "name": "What does ADA Compliance Plugin for WordPress: Title II Grievance Form actually do?", "acceptedAnswer": {"@type": "Answer", "text": "VALUE Right now a grievance comes in as an email to one person's inbox. There's no log, no timestamp anyone else can see, and when the county asks you to produce the intake record you're forwarding old mail and hoping nothing got deleted. The complainant never got a receipt either, so as far as they know nobody read it — and that's the version that goes to the next authority. The plugin's own description says what's driving the date: \"28 CFR 35.107: 50+ employees must publish one. Under 50,000 population: WCAG 2.1 AA April 26, 2027.\" A generic contact form plugin doesn't get you there — it loads JavaScript, posts through an outside service, and gives you no intake screen at all. This one is built the other way: \"Every field is a real HTML label tied to its own input, with native required marking, and the form loads no JavaScript at all,\" and \"Grievances are stored in your own WordPress database and the plugin makes no request to any outside service.\" Pasted script tags stay plain text. Install the free version first and run a real grievance through it — the 9-field form, the shortcode, the admin log all work as shipped. The paid one adds the three things an audit actually asks for: CSV export of the whole grievance log, an email alert to the site administrator on every new grievance, and an automatic receipt to the person who filed it. Freelance WordPress developers publish hou"}}, {"@type": "Question", "name": "Who is ADA Compliance Plugin for WordPress: Title II Grievance Form for?", "acceptedAnswer": {"@type": "Answer", "text": "Two axes at once: the person who actually runs the website (webmaster, communications officer, or the one IT generalist) at a US ADA Title II public entity — a city, county, township, school district, public library, transit agency, or special district. They must be right because 28 CFR 35.107 requires a public entity employing 50 or more persons to designate an ADA Coordinator and to adopt and publish grievance procedures, and because the DOJ web rule (28 CFR part 35 subpart H) already applied on April 24, 2026 to entities serving a total population of 50,000 or more, with April 26, 2027 for entities under 50,000 and for special district governments. A private business may use the same form, but those two dates are Title II, which is government."}}, {"@type": "Question", "name": "What can I do for free, and what needs the paid version?", "acceptedAnswer": {"@type": "Answer", "text": "Export the CSV on the day you install it, before any real grievance arrives, and keep that empty file as your dated zero baseline; then re-export on the first working day of every month into the same folder as your self-evaluation records, so the ADA Coordinator always has a current dated file to produce on request."}}, {"@type": "Question", "name": "What would this cost if someone did it for me?", "acceptedAnswer": {"@type": "Answer", "text": "Freelance WordPress developers publish their hourly rates openly on US marketplaces, commonly from about $25 to over $75 an hour, and a custom accessible intake form with an admin log, a CSV export and two automatic emails is a multi-hour build."}}], "datePublished": "2026-09-25", "dateModified": "2026-09-25", "author": {"@type": "Organization", "name": "ReadyStack", "url": "https://getreadystack.com"}}</script>
</head><body>
<h1>ADA Compliance Plugin for WordPress: Title II Grievance Form</h1><p class="sub">Accessible grievance form for US public entities. 28 CFR 35.107: 50+ employees must publish one. Under 50,000 population: WCAG 2.1 AA April 26, 2027.</p>
<div class="wrap"><form id="f"><label for="i_filer_name">Full name of the person filing this grievance</label><input id="i_filer_name" data-k="filer_name" type="text">
<label for="i_filer_email">Email address where we should reply</label><input id="i_filer_email" data-k="filer_email" type="email">
<label for="i_filer_phone">Phone, TTY or relay number, if you would rather be called</label><input id="i_filer_phone" data-k="filer_phone" type="tel">
<label for="i_barrier_date">Date you ran into the barrier</label><input id="i_barrier_date" data-k="barrier_date" type="date">
<label for="i_barrier_type">What kind of barrier was it?</label><select id="i_barrier_type" data-k="barrier_type"><option>Web page or online form on this site</option><option>PDF or other document on this site</option><option>Video or audio without captions, transcript or audio description</option><option>Physical facility, sidewalk, entrance or parking</option><option>Program, service, meeting or public event</option><option>Something else</option></select>
<label for="i_barrier_location">Exact web address (URL) or physical address where it happened</label><input id="i_barrier_location" data-k="barrier_location" type="text">
<label for="i_assistive_tech">Assistive technology you were using at the time</label><select id="i_assistive_tech" data-k="assistive_tech"><option>Screen reader</option><option>Screen magnification or large text</option><option>Voice control or speech input</option><option>Keyboard only, no mouse</option><option>Switch, head pointer or other alternative input</option><option>Captions, transcripts or sign language interpretation</option><option>None</option></select>
<label for="i_what_happened">Describe what you were trying to do and what stopped you</label><textarea id="i_what_happened" data-k="what_happened" rows="3"></textarea>
<label for="i_remedy_sought">What change would make this usable for you</label><textarea id="i_remedy_sought" data-k="remedy_sought" rows="3"></textarea></form><div class="card"><h3>ADA Grievance Intake</h3><p><b>Full name of the person filing this grievance:</b> <span id="o_filer_name"></span></p><p><b>Email address where we should reply:</b> <span id="o_filer_email"></span></p><p><b>Phone, TTY or relay number, if you would rather be called:</b> <span id="o_filer_phone"></span></p><p><b>Date you ran into the barrier:</b> <span id="o_barrier_date"></span></p><p><b>What kind of barrier was it?:</b> <span id="o_barrier_type"></span></p><p><b>Exact web address (URL) or physical address where it happened:</b> <span id="o_barrier_location"></span></p><p><b>Assistive technology you were using at the time:</b> <span id="o_assistive_tech"></span></p><p><b>Describe what you were trying to do and what stopped you:</b> <span id="o_what_happened"></span></p><p><b>What change would make this usable for you:</b> <span id="o_remedy_sought"></span></p></div></div>
<script>document.getElementById('f').addEventListener('input',function(e){
var k=e.target.getAttribute('data-k');if(!k)return;var o=document.getElementById('o_'+k);
if(o)o.textContent=e.target.value;});</script>
<section data-yj-cta="paid" style="margin:3rem auto;max-width:46rem;padding:1.5rem 1.25rem;border:1px solid #d8dee9;border-radius:12px;background:#fbfcfe;font:16px/1.6 system-ui,-apple-system,Segoe UI,sans-serif"><h2 style="margin:0 0 .5rem;font-size:1.25rem">Get the complete version <span class="yj-price">$60</span></h2><p style="margin:.25rem 0 1rem;color:#41505f">This page is the working piece. The full pack has everything below.</p><p style="margin:0 0 1rem;color:#41505f">Accessible grievance form for US public entities. 28 CFR 35.107: 50+ employees must publish one. Under 50,000 population: WCAG 2.1 AA April 26, 2027.</p><p style="margin:0 0 1rem;color:#5b6b7c;font-size:.94rem">Freelance WordPress developers publish their hourly rates openly on US marketplaces, commonly from about $25 to over $75 an hour, and a custom accessible intake form with an admin log, a CSV export and two automatic emails is a mu</p><a href="https://getreadystack.com/api/buy/cl/polar_cl_v4GlEt8ilflsBBpekOKwKohsG6gelig1ngBn82ywnpX" rel="nofollow" style="display:inline-block;padding:.7rem 1.3rem;border-radius:8px;background:#1b64f2;color:#fff;text-decoration:none;font-weight:600">Buy the full version — $6</a></section>
<section class="yj-related" style="max-width:920px;margin:56px auto 40px;padding:0 20px"><h2 style="font:600 21px/1.3 system-ui,sans-serif;margin:0 0 6px;color:#1b1f24">More from ReadyStack</h2><p style="font:400 14.5px/1.5 system-ui,sans-serif;margin:0 0 20px;color:#5b6570">Ready-to-use files. One-time download, no subscription.</p><div style="display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:14px"><a class="yj-rel-c" href="https://getreadystack.com/tools/real-estate-webflow-template"><span class="yj-rel-t">Real Estate Webflow Template Alternative — 7-Page Self-Hosted HTML Broker Site</span><span class="yj-rel-p">$49</span></a><a class="yj-rel-c" href="https://getreadystack.com/tools/cinematic-lut-pack"><span class="yj-rel-t">Cinematic LUT Pack for Wedding and Travel Filmmakers — Golden Hour, Overcast, </span><span class="yj-rel-p">$100</span></a><a class="yj-rel-c" href="https://getreadystack.com/tools/tax-preparer-website-template"><span class="yj-rel-t">Tax Preparer Website Template — 11-Page Self-Contained HTML Site for US Tax Pr</span><span class="yj-rel-p">$49</span></a><a class="yj-rel-c" href="https://getreadystack.com/tools/lawyer-website-template"><span class="yj-rel-t">Lawyer Website Template — 7-Page HTML Site for a Solo Law Office (No Subscript</span><span class="yj-rel-p">$49</span></a><a class="yj-rel-c" href="https://getreadystack.com/tools/wedding-planning-template-budget-calculator"><span class="yj-rel-t">Wedding Planning Template — US Catering Contract Budget: Service Charge, Sales</span><span class="yj-rel-p">$90</span></a><a class="yj-rel-c" href="https://getreadystack.com/tools/invoice-wordpress-plugin"><span class="yj-rel-t">Vendor Invoice Intake - WordPress Plugin for US Payables</span><span class="yj-rel-p">$60</span></a></div><style>.yj-rel-c{display:flex;flex-direction:column;gap:8px;padding:15px 16px;border:1px solid #e2e6ea;border-radius:6px;text-decoration:none;background:#fff}.yj-rel-c:hover{border-color:#b9c2cb;background:#fafbfc}.yj-rel-t{font:500 14.5px/1.42 system-ui,sans-serif;color:#1b1f24}.yj-rel-p{font:600 13px system-ui,sans-serif;color:#0a6238}</style></section><!--yj-share-s101--><div style="margin:28px 0 8px;text-align:center"><button id="yjcp" type="button" style="font:inherit;padding:10px 18px;border:1px solid #8884;border-radius:10px;background:transparent;cursor:pointer">Copy link</button></div><script>(function(){var b=document.getElementById("yjcp");if(!b)return;var t=b.textContent;b.addEventListener("click",function(){var u=location.href.split("#")[0];function d(){b.textContent="Link copied";setTimeout(function(){b.textContent=t;},1800);}if(navigator.clipboard&&navigator.clipboard.writeText){navigator.clipboard.writeText(u).then(d,function(){prompt("",u);});}else{prompt("",u);}});})();</script>
<div class="yj-home-find"><div class="yj-lgbar"><a href="/" class="yj-lg on">EN</a><a href="/de/" class="yj-lg">DE</a><a href="/ja/" class="yj-lg">JA</a><a href="/es/" class="yj-lg">ES</a><a href="/pt/" class="yj-lg">PT</a></div><section class="yj-find"><h2>Find a tool</h2><input id="yjq" type="search" autocomplete="off" placeholder="Type a product name, format or task"><div id="yjr"></div></section><style>.yj-lgbar{position:absolute;top:14px;right:18px;display:flex;gap:6px;z-index:60}.yj-lg{font:600 12px/1 system-ui,sans-serif;padding:6px 9px;border-radius:4px;text-decoration:none;color:#8b96a3;border:1px solid rgba(140,150,165,.28)}.yj-lg:hover{color:#e8eaed;border-color:rgba(160,175,195,.6)}.yj-lg.on{color:#0e1116;background:#cfd6de;border-color:#cfd6de}.yj-find{max-width:760px;margin:34px auto 8px;padding:0 20px}.yj-find h2{font:600 20px/1.3 system-ui,sans-serif;margin:0 0 10px}#yjq{width:100%;box-sizing:border-box;padding:13px 15px;font:400 15.5px system-ui,sans-serif;border:1px solid rgba(140,150,165,.34);border-radius:8px;background:rgba(255,255,255,.04);color:inherit}#yjq:focus{outline:none;border-color:#7FD1C4}#yjr{margin-top:10px;display:flex;flex-direction:column;gap:6px}#yjr a{display:flex;justify-content:space-between;gap:12px;padding:11px 14px;border:1px solid rgba(140,150,165,.22);border-radius:6px;text-decoration:none;font:400 14.5px/1.4 system-ui,sans-serif;color:inherit}#yjr a:hover{border-color:#7FD1C4}#yjr .pr{font:600 13px system-ui,sans-serif;color:#5fbf9a;white-space:nowrap}</style><script>(function(){var q=document.getElementById("yjq"),r=document.getElementById("yjr"),D=null;function load(){if(D)return Promise.resolve(D);return fetch("/search-index.json").then(function(x){return x.json();}).then(function(j){D=j;return j;}).catch(function(){D=[];return D;});}function esc(t){return String(t).replace(/[&<>"]/g,function(c){return {"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"}[c];});}function run(){var v=q.value.trim().toLowerCase();if(v.length<2){r.innerHTML="";return;}load().then(function(j){var w=v.split(/\s+/),o=[];for(var i=0;i<j.length&&o.length<12;i++){var t=j[i].t.toLowerCase();var ok=true;for(var k=0;k<w.length;k++){if(t.indexOf(w[k])<0){ok=false;break;}}if(ok)o.push(j[i]);}r.innerHTML=o.length?o.map(function(x){return "<a href=\""+esc(x.u)+"\">"+"<span>"+esc(x.t)+"</span>"+(x.p?"<span class=\"pr\">$"+x.p+"</span>":"")+"</a>";}).join(""):"";});}q.addEventListener("input",run);q.addEventListener("focus",load);})();</script></div><section class="yj-email-gate" style="max-width:46rem;margin:2.5rem auto;padding:1.25rem;border:1px solid rgba(140,150,165,.28);border-radius:10px;font:400 15px/1.5 system-ui,sans-serif"><b style="font-size:1.05rem">Want the full version?</b><div style="opacity:.75;margin:.35rem 0 .8rem">Enter your email and we send the download link.</div><div style="display:flex;gap:8px;flex-wrap:wrap"><input id="yjge" type="email" placeholder="you@example.com" style="flex:1;min-width:210px;padding:11px 13px;border:1px solid rgba(140,150,165,.34);border-radius:8px;background:rgba(255,255,255,.04);color:inherit"><button id="yjgb" style="padding:11px 18px;border-radius:8px;border:0;cursor:pointer;font:600 15px system-ui,sans-serif">Send it to me</button></div><div id="yjgo" hidden style="margin-top:.6rem;color:#5fbf9a">Sent. Check your inbox.</div><script>(function(){var b=document.getElementById("yjgb"),e=document.getElementById("yjge");if(!b||!e)return;b.addEventListener("click",function(){var v=e.value.trim();if(!/.+@.+\..+/.test(v))return;try{localStorage.setItem("yj_em","1");}catch(_){}fetch(location.origin+"/api/subscribe",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:v,slug:"wordpress-ada-compliance-plugin",lang:"en",source:"hub_gate"})}).catch(function(){}).then(function(){document.getElementById("yjgo").hidden=false;});});})();</script></section>


<script data-yj="yj-view-beacon">(function(){try{var p=location.pathname;var k='yjv:'+p;if(sessionStorage.getItem(k))return;sessionStorage.setItem(k,'1');fetch('/api/ev',{method:'POST',keepalive:true,headers:{'Content-Type':'application/json'},body:JSON.stringify({path:p,lang:"en",ref:(document.referrer||''),src:(function(){try{return (new URLSearchParams(location.search).get('ref')||'').replace(/[^a-z_]/g,'').slice(0,12)}catch(e){return ''}})()})}).catch(function(){});}catch(e){}})();</script>

<script data-yj="yj-use-beacon v2">(function(){try{var r=document.querySelector('main')||document.body;var p=location.pathname,k='yju:'+p,sent=false,armed=false;function ours(el){return !!(el&&el.closest&&el.closest('[data-yj],[data-yj-cta],.yj-email-gate,.yj-find,.yj-related,#yj-ask,#yjgo,#yjr'));}function fire(){if(sent||!armed||sessionStorage.getItem(k))return;sent=true;sessionStorage.setItem(k,'1');fetch('/api/ev',{method:'POST',keepalive:true,headers:{'Content-Type':'application/json'},body:JSON.stringify({path:p,lang:"en",t:'use',src:(function(){try{return (new URLSearchParams(location.search).get('ref')||'').replace(/[^a-z_]/g,'').slice(0,12)}catch(e){return ''}})()})}).catch(function(){});}r.addEventListener('click',function(e){var b=e.target&&e.target.closest?e.target.closest('button,input[type=submit],[role=button]'):null;if(!b||ours(b))return;armed=true;setTimeout(fire,400);},true);r.addEventListener('input',function(e){if(!ours(e.target))armed=true;},true);var mo=new MutationObserver(function(){if(armed){fire();if(sent)mo.disconnect();}});mo.observe(r,{childList:true,characterData:true,subtree:true});}catch(e){}})();</script>

<script src="/assets/pro.js" defer></script>
</body></html>