WP Manifestindependent plugin directory
manifest / privacy / theseo-toegankelijkheidsverklaring

Accessibility Statement and EN 301 549 Self Check by TheSEO

Toetst je WordPress-site op de machinaal toetsbare punten van EN 301 549 en schrijft een toegankelijkheidsverklaring die klopt met de meting. Geen overlay. Gratis GPL-plugin van theseo.nl.

by TheSEO · github.com/gianlucanaarden/theseo-toegankelijkheidsverklaring · website

0stars
1release downloads
0forks

Install

The author publishes release zips, so WP-CLI can install straight from GitHub:

wp plugin install https://github.com/gianlucanaarden/theseo-toegankelijkheidsverklaring/releases/download/v1.0.0/theseo-toegankelijkheidsverklaring-1.0.0.zip

Readme

Accessibility Statement and EN 301 549 Self Check

Een WordPress-plugin van TheSEO die twee dingen doet die vandaag vrijwel nooit samen gedaan worden: hij toetst je site op de punten uit EN 301 549 die je machinaal kunt toetsen, en hij schrijft daarna een toegankelijkheidsverklaring die klopt met wat er werkelijk gemeten is.

Geen overlay. Geen widget. Geen knop die beweert je site toegankelijk te maken. De plugin wijst aan waar het misgaat, in de opmaak, en jij herstelt het daar.

Interface in het Nederlands en in het Engels. De verklaring in het Nederlands of in het Engels, los daarvan in te stellen.

Waarom deze plugin bestaat

De Europese toegankelijkheidsrichtlijn geldt sinds 28 juni 2025 voor onder meer webshops en online diensten aan consumenten. De pluginmap van WordPress staat vol met overlay-widgets, en juist die aanpak wordt door de toegankelijkheidswereld afgeraden: een overlay lost het onderliggende probleem niet op, hij legt er iets overheen.

Wat er nauwelijks is, is het document zelf. De verklaring die de richtlijn vraagt, gebouwd op een echte meting, in het Nederlands. Dat is wat hier zit.

Wat hij toetst

Achttien regels: tien die iemand blokkeren en acht die aandacht verdienen. Samen raken ze twaalf succescriteria van WCAG 2.2. Hoofdstuk 9 van EN 301 549 neemt de WCAG-criteria een op een over, dus criterium 1.1.1 is punt 9.1.1.1 van de norm. Beide nummers staan bij elke bevinding.

Wat Zwaarte WCAG
afbeelding zonder tekstalternatief blokkerend 1.1.1
tekstalternatief dat een bestandsnaam is aandachtspunt 1.1.1
klikbaar gebied van een afbeeldingskaart zonder alt blokkerend 1.1.1
ingesloten object zonder terugval aandachtspunt 1.1.1
lege kop blokkerend 1.3.1
kopniveau overgeslagen aandachtspunt 1.3.1
tabel zonder koppencellen aandachtspunt 1.3.1
geluid dat vanzelf begint blokkerend 1.4.2
zoomen uitgezet of begrensd blokkerend 1.4.4
pagina zonder titel blokkerend 2.4.2
positieve tabindex aandachtspunt 2.4.3
link zonder naam blokkerend 2.4.4
linktekst die niets zegt aandachtspunt 2.4.4
link opent in een nieuw venster zonder waarschuwing aandachtspunt 3.2.5
paginataal niet ingesteld blokkerend 3.1.1
formulierveld zonder label blokkerend 3.3.2
dezelfde id twee keer aandachtspunt 4.1.1
frame zonder naam blokkerend 4.1.2

Criterium 4.1.1 is in WCAG 2.2 ingetrokken en telt onder EN 301 549 nog zolang die norm naar WCAG 2.1 wijst. Daarom staat het hier als aandachtspunt en niet als blokkerende bevinding, en die reden staat ook naast de bevinding zelf.

Wat hij niet toetst, en dat op elk scherm zegt

Een machinale toets dekt een deel van toegankelijkheid en niet meer. Hij ziet een ontbrekend tekstalternatief. Hij kan niet beoordelen of dat alternatief de afbeelding beschrijft, of je site met alleen een toetsenbord te bedienen is, of het contrast klopt, of een foutmelding zichzelf uitlegt, of een zelfgebouwde component zich gedraagt zoals hij zich aankondigt.

Een verklaring die alleen op deze meting leunt is onvolledig. Die zin staat in de verklaring zelf, op het overzicht en op het instellingenscherm. Testen met mensen die hulpsoftware gebruiken en een beoordeling door een deskundige zijn de delen die ontbreken.

Installeren

  1. Download theseo-toegankelijkheidsverklaring-1.0.0.zip.
  2. WordPress, Plugins, Nieuwe plugin, Plugin uploaden, activeren.
  3. Instellingen, Toegankelijkheid.

Eisen: WordPress 6.0 of nieuwer, PHP 7.4 of nieuwer, en de DOM-uitbreiding van PHP. Ontbreekt die uitbreiding, dan blijft de plugin uit en zegt hij dat met een melding in plaats van halverwege de eerste controle stuk te gaan.

Wat hij opslaat

Twee tabellen in je eigen database.

{prefix}theseo_ta_bevindingen houdt per bevinding het post-id, de regelcode, de zwaarte, een korte verwijzing naar het element, het stukje html afgekapt op 300 tekens, en het moment van meten. {prefix}theseo_ta_scans houdt per controle het moment, de stand waarin er gelezen is en de tellers. De velden van de verklaring staan in een enkele optie.

Geen persoonsgegevens. Geen bezoekersdata. Geen IP-adres, geen cookie, niets in localStorage of sessionStorage, geen user agent. De plugin kijkt helemaal niet naar je bezoekers; hij leest je eigen inhoud.

Deactiveren laat de bevindingen staan en stopt alleen de automatische controle. Verwijderen laat uninstall.php beide tabellen, de optie en de geplande taak opruimen, op elke site van een multisite. De verklaringspagina blijft staan, want die is van jou.

Het enige verzoek dat ooit je server verlaat

De controle leest of alleen de inhoud van een item, dus wat de editor oplevert, of de hele pagina inclusief de kop, het menu en de voettekst van je thema. Drie van de achttien regels zijn alleen op een hele pagina te beoordelen: de paginataal, de paginatitel en de viewport.

Die hele pagina zien kan maar op een manier, en dat is je eigen site via http om de pagina vragen. Dat verzoek gaat naar je eigen domein en nergens anders heen. De stand alleen de inhoud is de standaard, en in die stand is er geen enkel uitgaand verzoek. Sommige hostingpartijen blokkeren dat een site zichzelf aanroept; het overzicht meldt dan hoeveel items niet gelezen konden worden, in plaats van ze stilletjes als schoon te tellen.

De verklaring

Het tabblad Verklaring vraagt om wat een verklaring nodig heeft: naam van de organisatie, waar iemand een probleem meldt, wat er gebeurt als jij niet reageert, de datum van de beoordeling en wie hem uitvoerde. Daarna kies je per regel die ergens op de site echt gebroken is een van drie antwoorden: opgelost, bekend en wordt aan gewerkt, of onevenredige last met jouw motivering erbij.

De tekst wordt uit die antwoorden en uit de meting opgebouwd, en uit niets anders. Je ziet hem volledig op het scherm voordat er iets wordt weggeschreven. De knop bewaart hem als conceptpagina. Er wordt nooit iets voor je gepubliceerd. Bestaat de pagina al, dan wordt hij herschreven en houdt hij de status die hij had.

Een Nederlandse overheidsinstantie heeft een ander document nodig en moet zijn verklaring in het landelijke register publiceren, in het voorgeschreven model. Dit is dat model niet en het vervangt het niet. Dat staat op het scherm voordat je iets invult.

Mappen

theseo-toegankelijkheidsverklaring/
  theseo-toegankelijkheidsverklaring.php   kopregels, constanten, twee guards
  uninstall.php                            ruimt beide tabellen en de optie op
  readme.txt                               voor de WordPress-pluginmap
  includes/
    class-tstv-rules.php                   de achttien regels, hun tekst en zwaarte
    class-tstv-scanner.php                 leest html, kent WordPress niet
    class-tstv-runner.php                  loopt over de items, kent html niet
    class-tstv-repository.php              alle query's op een plek
    class-tstv-install.php                 de twee tabellen en de geplande taak
    class-tstv-settings.php                instellingen, gevalideerd in en uit
    class-tstv-statement.php               bouwt de verklaring als blokopmaak
    class-tstv-admin.php                   de drie tabbladen en twee ajax-routes
    class-tstv-plugin.php                  elke hook op een plek
  assets/
    css/tstv-admin.css
    js/tstv-admin.js                       draait de controle in stappen
  languages/                               pot, nl_NL.po en nl_NL.mo

Veiligheid

Nonce en current_user_can( 'manage_options' ) op elke schrijfactie en op beide ajax-routes. Alle uitvoer ontsnapt. Alle query's via $wpdb->prepare of via insert, update en delete met een formaatlijst. ABSPATH-guard bovenaan elk bestand. Geen superglobal zonder sanitatie. Geen eval, geen base64_decode, geen code van buiten.

Testen

TESTEN.md bevat een testinstructie van vijf minuten waarmee je zelf vaststelt dat de plugin doet wat de readme belooft, stap voor stap, met per stap een uitkomst die je met eigen ogen ziet.

De logica draait ook buiten WordPress:

cd tests
php test-toegankelijkheid.php

101 controles over de scanner, de regels en de validatie van de instellingen.

Licentie

GPLv2 of later. Zie LICENSE.

Read the full README on GitHub →

Releases

TagPublishedAssetDownloads
v1.0.0 Aug 19, 2026 theseo-toegankelijkheidsverklaring-1.0.0.zip 1