Tout savoir sur WordPress
Tutoriel WordPress

Supprimer la variable ver=3.x des fichiers JavaScript et CSS

Lors de la déclaration d’un fichier via wp_register_script/style, le lien vers celui-ci contient la variable ver=3.1.2. Pour plus de sécurité, découvrez comment supprimer cette variable.

Quand on ajoute un fichier javascript ou CSS grâce aux fonctions wp_register_script() ou wp_register_style(), on remarque que WordPress ajoute la variable ver=3.x (x correspond à la dernière version de WordPress) sur le lien menant vers le fichier.

Cette variable révèle la version de votre WordPress et devient un détail précieux pour les hackers. Pour limiter les risques de hack, il est conseillé de remplacer cette valeur.

Copiez le code suivant dans le fichier functions.php présent à la racine de votre thème :
[pastacode lang=”php” message=”” highlight=”” provider=”manual”]


add_filter( 'script_loader_src', 'baw_delete_script_version', 15, 1 );
add_filter( 'style_loader_src', 'baw_delete_script_version', 15, 1 );
function baw_delete_script_version( $src ){
   $parts = explode( '?', $src );
   $ver = '?ver=' . md5( wp_salt( 'nonce' ) . $parts[1] );
   return $parts[0] . $ver;
}

[/pastacode]

Pour rappel, voici les liens d’accès aux tutos dans lesquels il est expliqué la méthode à suivre pour déclarer les fichiers JavaScript et CSS sur WordPress.

Cet article a été mis à jour il y a 4721 jours - Il n'est peut être plus à jour !

Article écrit par Jonathan B.

Jonathan est le co-fondateur de WP Media, startup connue pour être l’auteur de WP Rocket et Imagify. Il est aussi co-organisateur du WordCamp Lyon et Paris.

11 Commentaires

  1. Bonjour,
    Merci pour cette information, je cherche justement à enlever les variables pour mon thème. Pourriez-vous m’indiquer où placer ce code ? Dans le fichier functions.php ? D’avance merci !

  2. Hello
    Bon je ne vais pas revenir sur le fait de cacher ou non sa version, mais je vais indiquer pourquoi ici WordPress affiche ce numéro et pourquoi il faut le remplacer et pas le supprimer.
    WordPress ajoute un valeur qui ne changera qu’à chaque version de WordPress. Ceci est utile pour le cache. Le fichier “style.css” et “style.css?ver=3.3.1” sont 2 fichiers différents pour le cache.
    Si votre fichier .htaccess indique que les fichiers js/css/jpg ne doivent etre rechargés que tous les ans, la prochaine mise à jour de votre WordPress risque de provoquer des désagréments chez vos visiteurs. Il leur faudra vider leur cache, dommage :/
    Il FAUT donc indiquer ici une valeur qui ne changera qu’avec la mise à jour de WordPress.
    Voici mon code :

    function delete_script_version( $src ){
    	$parts = explode( '?', $src );
    	$ver = '?ver=' . md5( wp_salt( 'nonce' ) . $parts[1] );
    	return $parts[0] . $ver;
    }
    add_filter( 'script_loader_src', 'delete_script_version', 15, 1 );
    add_filter( 'style_loader_src', 'delete_script_version', 15, 1 );
    

    En ajoutant une valeur basé sur ce numéro de version WordPress mais quasi impossible à deviner, vous gardez le systeme de cache sans montrer votre version.
    Bonne journée !

  3. @Julio : Je remarque ton commentaire que maintenant ! En effet, à l’époque de la publication de l’article, je ne connaissais pas du tout l’utilité de la variable en GET.

    Du coup, j’ai mis à jour l’article avec ton code.

    Merci à toi pour tes conseils qui sont toujours aussi bon :)

  4. héhé heureusement qu’il y a la V3 sinon je serais passé à la trappe non ? ;)
    On en apprends tous les jours de toutes façons :D
    See you !

  5. Attention, ce code va peut-être camoufler le paramètre “ver” passé au script, mais il va également manger les autres paramètres passés. Cela va par exemple supprimer les paramètres donnés à Google Maps :
    http://maps.google.com/maps/api/js?sensor=false&language=en&ver=3.6 devient http://maps.google.com/maps/api/js?ver=0d392e5cd6a3214f5dec12b66b606c6b (par exemple) et on perd “sensor” et “en”

    Du coup mon code :

    function baw_delete_script_version( $src ) 
    {
        return preg_replace('/(ver=[^&]+)/', 'ver=' . md5( wp_salt( 'nonce' ) . '$1' ), $src);
    }
    add_filter( 'script_loader_src', 'baw_delete_script_version', 15, 1 );
    add_filter( 'style_loader_src', 'baw_delete_script_version', 15, 1 );
    

    Comme ça on ne cache que ver :)

  6. @Darwin: En effet, j’avais totalement oublié cette subtilité. Merci beaucoup pour la rectification du code :)

  7. Bonjour,

    Chez moi ce script me donne une erreur car $part n’a pas décomposé $src :
    Notice: Undefined offset: 1 in D:wampwwwwordpress371wp-contentpluginsmypluginmyplugin.php on line 69

  8. Bonjour, cette astuce est-elle encore valable ?
    Car après ajout dans functions.php, suppression du cache du site et du navigateur, la version apparaît toujours à la fin de mes fichiers CSS et JS.
    de plus , je ne comprend pas l’intérêt pour WordPress d’afficher cette valeur, vous connaissez la raison ?
    Merci pour vos astuces !

  9. @Jonathan: Oui, cette astuce est encore valable ;)

    L’intérêt pour WordPress est de pouvoir contrôler le “browser caching” des nous fichiers CSS et JS qu’il pourrait ajouté et/ou modifié.