Sur une ancre, l’attribut title sert généralement à donner une indication sur la destination du lien. Si son utilité est certaine dans une optique d’accessibilité, cet attribut peut poser des problèmes de lisibilité sur les sous-menus lorsqu’il est appliqué sur les liens d’un menu déroulant vertical ou horizontal comme c’est le cas sur css 4 design. Dans WordPress, le title des liens des catégories affiche la description de la catégorie si elle est renseignée, ou un title par défaut si l’on ajoute le paramètre use_desc_for_title dans la fonction wp_list_categories(). Or, je n’ai rien trouvé qui permet de supprimer purement et simplement ce title une bonne fois pour toute.
Avec jQuery
Voyons comment jQuery peut nous aider avec la méthode removeAttr() qui permet de supprimer l’attribut passé en paramètre, ici le title, soit :
$(document).ready(function () {
$('#catlist ul a').removeAttr('title');
});
Merci à ceux qui ont pris le temps de répondre à ma question sur Twitter pour la bonne syntaxe jQuery :
Sans jQuery
jQuery c’est bien joli, mais il peut être intéressant d’avoir une version PHP pour se passer de cet attribut title récalcitrant. Jamy me propose sur Twitter l’article Remove the Title Attribute from WordPress Category and Page Lists qui donne une solution à cet épineux problème. Il s’agit de supprimer la balise en question avec une fonction category_without_title_attribute() utilisant la fonction preg_replace de PHP à placer dans le fichier functions.php de votre thème WordPress. Reste à utiliser ensuite cette fonction à la place de wp_list_categories() . C’est simple, net et sans bavure.
Supprimer les title dans le menu «Catégories»
<?php
function categories_without_title_attribute() {
$categories = wp_list_categories('echo=0');
$categories = preg_replace('/title=\"(.*?)\"/','',$categories);
echo $categories;
}
?>
Supprimer les title dans le menu «Pages»
Pour faire la même chose avec la liste des pages WordPress, il suffit de modifier la fonction précédente comme suit :
<?php
function pages_without_title_attribute() {
$pages = wp_list_pages('echo=0');
$pages = preg_replace('/title=\"(.*?)\"/','',$pages);
echo $pages;
}
?>
Remplacer wp_list_pages ou wp_list_categories
Si vous voulez utiliser ces fonctions personnalisées dans l’ensemble de votre thème, il suffit d’appliquer un filtre WordPress en ajoutant les actions suivantes dans functions.php :
add_filter('wp_list_categories', 'categories_without_title_attribute');
add_filter('wp_list_pages', 'pages_without_title_attribute');
Conclusion
La suppression pure et simple de l’attribut côté serveur permet de ne pas dépendre de l’installation d’un framework comme jQuery pour économiser les ressources côté client ou simplement en fonction de vos habitudes de travail. Toutefois, la méthode avec jQuery préserve un semblant d »accessibilité : au cas où Javascript est désactivé, les title sont toujours là pour remplir leur office.
PS : Le respect de la vie privée sur internet est important : j'ai décidé d'échanger mon bouton Like de Facebook par un bouton Faire un don de Paypal car Il n'y pas d'amour, il n'y a que des preuves d'amour
(Jean Cocteau) ;) Merci d'avance.
Pour compléter ton article, j’avais écrit un article sur le rôle du title du point de vue de l’accessibilité.
Je viens de tester la version php dans mon thème et elle n’a pas fonctionnée, elle me met la page en erreur :/ A bien regarder ces filtres, bien que débutant avec wordpress et n’étant pas un expert en php, je me demande même comment ça pourrait fonctionner: dans la nouvelle fonction il utilise la fonction qu’il veut remplacer o_O (donc boucle infinie?) Bref, je vais m’y pencher plus longtemps pour voir où est le soucis.
Une balise title est obligatoire, notamment en xhtml strict. De plus, l’accessibilité impose son usage et plus particulièrement sur les <q cite=" »> et les <q cite="« > L’apparition d’une info bulle ne gâche en rien la lisibilité d’un menu (?!) le survol déclenche l’info bulle au bout de plus de 500ms et une fois qu’elle est visible c’est ca qu’il faut lire, peu importe que ca cache partiellement le lien lui même.
Enfin, si l’on parle d’enrichissement jQuery, il y pléthore de moyens d’améliorer le comportement des info bulles. Les retirer me parait un non sens.