Supprimer l’attribut title dans les catégories et les pages WordPress avec jQuery ou PHP

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.