Ce tutoriel va nous permettre de renommer un fichier sur WordPress que nous allons téléverser, afin de les rendre optimisé pour le web, c’est-à-dire : en minuscule, avec les « tirets du 6 » et des chiffres.
Introduction
Bien que WordPress soit un CMS plutôt intéressant et complet sur de nombreux plans, certaines fonctionnalités les plus utilisées ne sont pas forcément optimisées. Lorsque nous téléversons (upload) des médias (images, pdf, doc, etc.) sur une installation WordPress, ce dernier ne propose pas la réécriture des noms des fichiers uploadés et nous nous retrouvons généralement face à un problème quand nous devons récupérer le site et/ou le ré-héberger. Dans ce tutoriel, je vais vous expliquer comment faire pour renommer un fichier sur WordPress, de manière automatique.
Renommer un fichier sur WordPress
Pour réaliser ce renommage de fichier, nous allons passer par l’application d’une fonction sur le filtre « sanitize_file_name » afin de pousser un peu plus le niveau de réécriture du fichier. Cette opération nous permettra, par exemple, de passer d’un fichier qui se nomme F@_pf42çfèdg.JPG
en f-pf42cfedg.jpg
.
Création de la fonction et du filtre
Nous allons créé une fonction et l’ajouter au filtre « sanitize_file_name » avec une priorité à 10. Notez que nous utilisons la variable $filename
comme argument de la fonction.
if ( !function_exists( 'medias_rewrite_filename' ) ) { add_filter('sanitize_file_name', 'medias_rewrite_filename', 10); function medias_rewrite_filename($filename){ //votre code ici... } }
Réécrire un nom de fichier
Dans un premier temps, on met en place la variable dans la fonction remove_accents()
afin de convertir tous les accents en caractères « simple ». Vous pouvez retrouver la liste des caractères sur le site WordPress.
$clean_filename = remove_accents( $filename );
Ensuite, on efface les espaces, codes espaces et les underscores. On va les remplacer des tirets, tout simplement.
$invalid = array( ' ' => '-', '%20' => '-', '_' => '-', ); $clean_filename = str_replace( array_keys( $invalid ), array_values( $invalid ), $clean_filename );
Après cela, nous allons procéder à une réécriture des caractères afin qu’ils soient tous compris entre :
- A et Z (majuscules)
- a et z (minuscules)
- 0 et 9 (chiffres)
Sur la seconde ligne, on efface tous les caractères spéciaux listés.
Pour terminer, sur la troisième ligne, on efface tous les tirets supérieur à 1. En clair, si vous avez deux tirets (ou plus) à la suite, il le remplacera par un seul et unique tiret.
$clean_filename = preg_replace('/[^A-Za-z0-9-\. ]/', '', $clean_filename); $clean_filename = preg_replace('/\.(?=.*\.)/', '', $clean_filename); $clean_filename = preg_replace('/-+/', '-', $clean_filename);
En avant dernier, on remplace le tiret qui se trouve avant le point de l’extension.
$clean_filename = str_replace('-.', '.', $clean_filename);
Et pour terminer, on transforme tous les caractères en minuscules.
$clean_filename = strtolower( $clean_filename );
Hopopop ! J’allais oublier le petit retour.
return $clean_filename;
Code final
Et voilà ! Nous venons de terminer le code, vous devriez avoir quelque chose comme ça à la fin.
if ( !function_exists( 'medias_rewrite_filename' ) ) { add_filter('sanitize_file_name', 'medias_rewrite_filename', 10); function medias_rewrite_filename($filename){ $clean_filename = remove_accents( $filename ); $invalid = array( ' ' => '-', '%20' => '-', '_' => '-', ); $clean_filename = str_replace( array_keys( $invalid ), array_values( $invalid ), $clean_filename ); $clean_filename = preg_replace('/[^A-Za-z0-9-\. ]/', '', $clean_filename); $clean_filename = preg_replace('/\.(?=.*\.)/', '', $clean_filename); $clean_filename = preg_replace('/-+/', '-', $clean_filename); $clean_filename = str_replace('-.', '.', $clean_filename); $clean_filename = strtolower( $clean_filename ); return $clean_filename; } }
Aller plus loin
Ce petit code qui vous rendra service sur vos productions mérite également un emplacement de choix. En effet, vous pouvez très le mettre dans le fichier functions.php de votre thème ou même créer un plugin. Cependant, le meilleur emplacement, pour ce genre de fonctionnalités assez importante, reste d’en faire un mu-plugin.
Cela vous permettra d’avoir cette fonction toujours active et n’aura pas la fragilité d’être supprimé par votre client, que ce soit en thème ou en plugin « classique ».
Conclusion
La fonction que je viens de vous présenter est une façon de faire mais rien ne vous empêche de créer votre propre fonction avec vos ajouts personnels. LA fonction ultime n’existe pas encore malheureusement.
Vous savez maintenant comment faire pour renommer un fichier sur wordpress, de manière à avoir un nom de fichier optimisé pour le web. Cette petite fonction bien utile est loin d’être la seule et je m’en vais tester d’autres fonctions de ce genre afin de vous faciliter la vie.
Laisser un commentaire