Publié par Fabrice le 15 février 2010, temps de lecture estimé : 8 minutes Webmastering
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 :
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
.
À 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 :
Les fonctions du thème
Outre le fait que votre thème doit respecter certaines règles (cela ne change pas, quel que 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 quewp_list_bookmarks
- Pour lister les pages (dans la
sidebar
par exemple), utiliser la fonctionget_pages
, plutôt quewp_list_pages
- Et enfin, pour lister les catégories, utiliser la fonction
get_categories
, plutôt quewp_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 vous 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.