Etude de cas : rendre les extensions WordPress un peu anciennes compatibles avec les versions récentes de Firefox

Résoudre le problème d'HTTPS de l'interface d'administration WordPress avec FireFox

Nous avions vu comment passer l’interface d’administration de WordPress en HTTPS pour gagner en sécurité. Mais en activant cette fonctionnalité, avec une mise à jour récente de Firefox et l’utilisation de certaines extensions, des problèmes de compatibilité peuvent survenir.

Voyons étape par étape comment diagnostiquer puis résoudre le problème, en étudiant le cas de l’extension Microkid’s Related Posts.

C’est quoi le problème ?

Depuis peu, Firefox empêche l’inclusion de fichiers qui viennent d’HTTP dans une page HTTPS :

Mixed content blocking enabled to protects users from man-in-the-middle attacks and eavesdroppers on HTTPS pages.

Ainsi, si vous avez protégé l’interface d’administration de votre blog sous WordPress avec HTTPS, certaines extensions qui incluent des ressources JavaScript et CSS peuvent ne plus y être autorisées si elles le font en HTTP.

Ceci est d’autant plus vrai si l’extension est un peu ancienne et n’est donc plus maintenue par son auteur.

Alors que faire ? Chercher une autre extension ayant le même rôle ? Et si celle que vous utilisiez déjà était idéale pour votre utilisation, malgré son âge ?

Voyons comment essayer de corriger ce problème en étudiant le cas de Microkid’s Related Posts. Bien sûr ce processus est applicable à la plupart des extensions.

A quoi sert cette extension déjà ?

J’utilise cette extension pour améliorer le maillage interne de ce blog.
Il permet de définir manuellement pour chaque article les articles qui traitent du même sujet.

Résoudre le problème d'HTTPS de l'interface d'administration WordPress avec FireFox : le résultat de Microkid Related Posts
Le résultat dans les articles
L’ajout d’articles sur le même thème est simple :

Résoudre le problème d'HTTPS de l'interface d'administration WordPress avec FireFox : la configuration de Microkid Related Posts
L’interface lors de l’édition d’articles
Mais depuis Firefox 23.0.1, il ne fonctionne plus, les champs d’édition ont disparu :

Résoudre le problème d'HTTPS de l'interface d'administration WordPress avec FireFox : le problème dans Microkid Related Posts
Le problème
Et bien sûr, l’extension n’est plus maintenue, alors je ne peux espérer aucune correction de ce problème.

Voyons comment chercher et corriger l’erreur.

Recherche du code problématique

Ici nous avons une idée de l’origine du problème : JavaScript et CSS. Et pour diagnostiquer un problème JavaScript, un bon début est d’ouvrir la console d’erreurs.

Avec Firefox, elle se trouve dans Développement Web/Console d’erreurs.

Il est nécessaire de cliquer sur le bouton effacer pour purger les erreurs qui ont déjà eu lieu et ainsi faire un peu de ménage.

Ensuite il suffit de modifier un article, et cette erreur apparaît :

Résoudre le problème d'HTTPS de l'interface d'administration WordPress avec FireFox : la console d'erreurs
En flagrant délit…
Le message est :

Erreur : Blocage du chargement du contenu mixte actif (mixed active content) « http://www.partage-it.com/wp-content/plugins/microkids-related-posts/microkids-related-posts.js?v=4.0.1 »

Nous pouvons remarquer que le problème vient bien du contenu qui est en HTTP, alors que son contenant est en HTTPS.

Localisation du problème

Pour réparer, il est nécessaire de trouver où se situe l’erreur.

Pour cela, il faut d’abord récupérer le code source de l’extension, soit depuis le FTP de votre site, c’est-à-dire copier localement le dossier microkids-related-posts qui est dans wp-content/plugins/, soit en décompressant le fichier zip téléchargé sur le site des extensions de WordPress.

Ensuite, un rapide coup d’oeil sur les fichiers de l’extension laisse voir que peu de fichiers PHP sont présents.

En l’occurrence, celui qui nous intéresse est microkids-related-posts.php, il suffit alors de l’ouvrir avec votre éditeur de fichiers texte favori et de chercher que le lien vers notre fichier JavaScript (microkids-related-posts.js) s’y trouve bien.

function MRP_load_admin_includes() {
    echo '<script type="text/javascript" src="'.get_option('siteurl').'/wp-content/plugins/microkids-related-posts/microkids-related-posts.js?v=4.0.1"></script>';
    echo '<link rel="stylesheet" type="text/css" href="'.get_option('siteurl').'/wp-content/plugins/microkids-related-posts/microkids-related-posts-admin.css?v=4.0.1" />';
}

Nous pouvons remarquer que la fonction permettant de compléter l’URL est get_option(‘siteurl’), qui retourne l’URL du site. Le site est accessible par HTTP, donc cette fonction renvoie une URL commençant par ‘http‘, ce qui ne plait pas à Firefox.

Comment réparer

Il est donc nécessaire de trouver une fonction de remplacement.

Après quelques recherches (avec Google par exemple), la fonction plugins_url() apparaît comme plus adaptée. Elle retourne l’adresse pour accéder aux ressources des extensions, en respectant le schéma (HTTP ou HTTPS) de l’endroit d’où on l’appelle.

En clair, en appelant le fichier JavaScript de l’interface d’administration en HTTPS, l’URL retournée sera en HTTPS.

Nous pourrions modifier directement le code de microkids-related-posts.php, mais dans le cas peu probable où l’extension serait mise à jour, la modification serait perdue.
En même temps, notre correction pourrait devenir inutile à ce moment là. Paradoxal !

Le mieux est donc d’étudier une autre possibilité.

La fonction à corriger, MRP_load_admin_includes, est ajoutée dans l’en-tête par un hook :

add_action('admin_head','MRP_load_admin_includes');

Ce code signifie qu’au moment de la construction de la partie entre <head> et </head> de l’interface d’administration, la fonction MRP_load_admin_includes est appelée pour écrire l’inclusion des ressources JavaScript et CSS.

Le principe est donc d’enlever cet appel avec remove_action et d’insérer le nôtre, qui pointe vers une version corrigée de la fonction. Tout ceci est à réaliser à l’endroit que vous préférez, comme d’habitude maintenant.

/**
* Personnalisation de Microkid Related Posts pour gérer l'https automatiquement
*/
function MRP_custom_load_admin_includes() {
    echo '<script type="text/javascript" src="'.plugins_url().'/microkids-related-posts/microkids-related-posts.js?v=4.0.1"></script>';
    echo '<link rel="stylesheet" type="text/css" href="'.plugins_url().'/microkids-related-posts/microkids-related-posts-admin.css?v=4.0.1" />';
}
 
remove_action('admin_head','MRP_load_admin_includes');
add_action('admin_head','MRP_custom_load_admin_includes');

Ce code crée une nouvelle fonction MRP_custom_load_admin_includes qui utilise plugins_url, déréférence MRP_load_admin_includes pour le remplacer par notre nouvelle fonction.

Le mot de la fin

Nous avons vu comment diagnostiquer et corriger un problème avec une extension. Bien sûr l’expérience aide à s’en sortir toujours mieux et plus rapidement, comme souvent, mais c’est déjà un premier pas.
Alors n’hésitez pas à chercher et expérimenter.

Cet article vous a été utile ? Partage it !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Si vous le souhaitez, renseignez le champ 'Nom' de cette façon : 'VotreNom@VotreMotClef' pour obtenir une ancre optimisée pour les moteurs de recherche.