Formation PUB020 : WordPress, 2020 Le thème enfant

Cacher le numéro de version de WordPress tout en gérant le cache des fichier .css et .js


Il est prudent de cacher le numéro de version de WordPress afin que les hackers ne détectent pas facilement les retards de mises à jour...

▼Publicité

Par défaut, le numéro de version de WordPress apparaît dans le code HTML à différents endroits.

D'abord, dans une balise très explicite.

Ex :

HTML

<meta name="generator" content="WordPress 4.6.1" />

Ensuite, à la fin de différents noms de fichier .css et .js afin de mieux contrôler la mise en cache de ces fichiers.

Ex :

HTML

<link rel='stylesheet' href='http://mondomaine.com/wp-content/themes/twentyfourteen/style.css?ver=4.6.1' ... />
...
<script src='http://mondomaine.com/wp-includes/js/admin-bar.min.js?ver=4.6.1'></script>

Il est possible d'enlever toute trace de la version de WordPress en ajoutant le code suivant dans le fichier functions.php de votre thème enfant.

Ce code enlèvera complètement la balise <meta name="generator">. De plus, dans les autres lignes, il remplacera le numéro de version de WordPress par le numéro de version inscrit dans l'entête du fichier style.css de votre thème enfant. 

Je vous conseille d'utiliser un numéro de version qui ne donne aucune informations sur le temps qui s'est écoulé depuis la dernière modification (éviter les dates). Essayez également de ne pas utiliser un numéro de version qui pourrait être confondu avec celui de WordPress. Pour ma part, j'utilise une chaîne aléatoire (ex : fjdsk6).

À chaque fois que vous changerez ce numéro de version dans l'entête de votre feuille de style, les navigateurs seront forcés de relire les informations sur le serveur. Tout ceci sans exposer le numéro de version de WordPress. On aura donc le meilleur des deux mondes. Si vous choisissez d'utiliser une chaîne aléatoire comme numéro de version, il vous suffira d'incrémenter les dernier caractère à chaque mise à jour (ex : fjdsk7).

Dans le nom des fonctions, je vous conseille de changer « monprefixe » pour le nom de votre thème enfant.

fichier functions.php du thème enfant (PHP)

/**
 * Fonction de rappel du hook after_setup_theme, exécutée après que le thème ait été initialisé
 *
 * Utilisation : add_action( 'after_setup_theme', 'monprefixe_apres_initialisation_theme' );
 *
 * @author Christiane Lagacé
 *
 */
function monprefixe_apres_initialisation_theme() {
    // Retirer la balise <meta name="generator">
    remove_action( 'wp_head', 'wp_generator' ); 
}
 
add_action( 'after_setup_theme', 'monprefixe_apres_initialisation_theme' );
 
/**
 * Change l'attribut ?ver des .css et des .js pour utiliser celui de la version de style.css
 *
 * Utilisation : add_filter( 'style_loader_src', 'monprefixe_attribut_version_style', 9999 );
 *               add_filter( 'script_loader_src', 'monprefixe_attribut_version_style', 9999 );
 * Suppositions critiques : dans l'entête du fichier style.css du thème enfant, le numéro de version
 *                          à utiliser est inscrit à la ligne Version (ex : Version: ...)
 *
 * @author Christiane Lagacé
 * @return String Url de la ressource, se terminant par ?ver= suivi du numéro de version lu dans style.css
 *
 */
function monprefixe_attribut_version_style( $src ) {
   $version = monprefixe_version_style();
   if ( strpos( $src, 'ver=' . get_bloginfo( 'version' ) ) ) {
      $src = remove_query_arg( 'ver', $src );
      $src = add_query_arg( 'ver', $version, $src );
   }
   return $src;
}
 
add_filter( 'style_loader_src', 'monprefixe_attribut_version_style', 9999 );
add_filter( 'script_loader_src', 'monprefixe_attribut_version_style', 9999 );
 
/**
 * Retrouve le numéro de version de la feuille de style
 *
 * Utilisation : $version = monprefixe_version_style();
 * Suppositions critiques : dans l'entête du fichier style.css du thème enfant, le numéro de version
 *                          à utiliser est inscrit à la ligne Version (ex : Version: ...)
 *
 * @author Christiane Lagacé
 * @return String Le numéro de version lu dans style.css ou, s'il est absent, le numéro 1.0
 *
 */
function monprefixe_version_style() {
   $default_headers =  array( 'Version' => 'Version' );
   $fichier = get_stylesheet_directory() . '/style.css';
   $data = get_file_data( $fichier, $default_headers );
   if ( empty( $data['Version'] ) ) {
      return "1.0";
   } else {
      return $data['Version'];
   }
}

Une fois ce code en place, si votre thème enfant contient la ligne suivante dans l'entête de son fichier style.css :

fichier style.css du thème enfant (CSS)

Theme Name: MonThemeEnfant

... 

Version: fjdsk6

Les lignes contenant auparavant la version de WordPress contiendront désormais la version du fichier style.css.

Ex :

HTML

<link rel='stylesheet' href='http://mondomaine.com/wp-content/themes/twentyfourteen/style.css?ver=fjdsk6' ... />

...

<script src='http://mondomaine.com/wp-includes/js/admin-bar.min.js?ver=fjdsk6'></script>

Attention : le numéro de version de WordPress apparaît en clair dans le fichier readme.html présent à la racine du dossier wordpress. Ce fichier n'a aucune utilité pour un site WordPress et ne devrait en aucun cas être copié sur le serveur.

Dernière révision le 10 novembre 2020
Merci de partager !

Site fièrement hébergé chez A2 Hosting.

Soumettre