WordPress et le RGAA

Fabrice 8 mn Webmastering

WordPress et le RGAA

Ayant eu à réaliser une mise en conformité RGAA avec WordPress pour un site communal, j'ai pu identifier les principales problématiques rencontrées. Le principe de base est d'utiliser massivement les filtres afin de ne pas modifier le core du CMS en créant un plugin et en modifiant le fichier functions.php du thème.

La longue description des images

L'attribut longdesc, n'est pas nativement géré par WordPress, on va donc utiliser un subterfuge. Tout d'abord, il faut créer une catégorie destinée à recevoir le contenu de ces longues descriptions. Puis élaborer un modèle pour cette catégorie d'articles, dépouillé de toute fioriture (la balise title et le contenu brute sans feuille de style - référence : Règle 1.1 : Les équivalents textuels).

Lors de l'insertion d'image, il va falloir ajouter un champ au formulaire via le filtre attachment_fields_to_edit :

function image_attachment_fields_longdesc($form_fields, $post) {
  if (substr($post->post_mime_type, 0, 5) == 'image') {
  $form_fields['longdesc'] = array(
			'label' => 'Longue description',
			'input' => 'html',
			'html'  => '<input type="text" class="urlfield" name="attachments[$post->ID][longdesc]" id="longdesc" value="" />',
		);
   }      		
return $form_fields;
 
}
add_filter('attachment_fields_to_edit', 'image_attachment_fields_longdesc', 10, 2);

Vous devriez obtenir ceci :

Champ longues descriptions
Il ne reste plus qu'à modifier le code envoyé dans le textarea, pour cela il faut en passer par trois filtres successifs : get_image_tag, image_send_to_editor et media_send_to_editor.

A noter que vous pouvez également utiliser, dans certains cas, la légende ou une ancre dans la page.

Insertion d'image dans le textarea

Outre le fait que vous voulez peut-être utiliser une ModalBox pour vos images, WordPress insère souvent des informations en double, voir en triple via les attributs alt, title et la légende, ce qui provoque une surabondance d'information.
Les trois filtres à modifier sont les mêmes que précédemment.

TinyMCE

Sans doute, le plus gros morceau ! Vous avez deux possibilités : soit utiliser un plugin tel que TinyMCE Advanced, soit passer par les filtres : mce_buttons, mce_buttons_2 et mce_external_plugins. Une fois les fonctions barrer, alignement du texte, souligner, couleur de texte et indenter expurgées de l'éditeur visuel, il faut rajouter les fonctions indice et exposant, le plugin xhtmlxtras et ses fonctions de citation, d'abréviation et d'acronyme.

Pour les changements de langues, deux possibilités nous sont offertes : créer un plugin pour TinyMCE de toute pièce ou utiliser les shortcodes, comme ceci par exemple : [langue lg="en"]Sample[/langue].

Au finale, vous devriez avoir un éditeur visuel qui ressemble à ceci :

TinyMCE modifié pour l'accessibilité

Les fonctions du thème

Outre le fait que votre thème doit respecter certaines règles (cela ne change pas, quelques soit le CMS que vous allez utiliser), les fonctions natives dans les thèmes de WordPress nécessitent quelques aménagements :

  • the_excerpt qui supprime des balises nécessaires à la bonne accessibilité des résumés
  • Les galeries : il vous faudra retravailler complètement la fonction via le filtre post_gallery
  • Créer des formulaires à la main via un modèle de page
  • Créer un modèle de page pour le plan du site
  • Pour les liens, utiliser la fonction get_bookmarks, plutôt que wp_list_bookmarks
  • Pour lister les pages (dans la sidebar par exemple), utiliser la fonction get_pages, plutôt que wp_list_pages
  • Et enfin, pour lister les catégories, utiliser la fonction get_categories, plutôt que wp_list_categories

Dans ces trois derniers cas, l'utilisation des fonctions get plutôt que wp_list permet d'ôter les attributs title, d'insérer la balise <strong></strong> et une classe pour signaler la page courante, mais aussi de faire à peu près tout ce que voulez, puisque le résultat des requêtes vous est fourni sous forme de tableaux.

Pour terminer, lorsque vous voulez utiliser un filtre, il vous suffit de trouver dans le core de WordPress la fonction en question puis de la retravailler à votre sauce.