Archives mensuelles : février 2019

WordPress : Remplacer la fonction d’un plugin utilisant if(!function_exist())

Souvent les plugins wordpress déclarent leurs fonctions dans une condition « if(!function_exist()) » de ce type :

if (!function_exists('la_fonction_du_plugin')) {
    function la_fonction_du_plugin() {
        //code de la fonction
        //...
    }
}

Si le plugin ne propose pas de méthode permettant d’overrider le fichier contenant cette fonction ni de hook pour la modifier on se retrouve bloqué. Mais on peux tirer avantage que la fonction soit englober dans un « if(!function_exist()) » pour ne pas modifier le coeur du plugin est ainsi continuer à pouvoir profiter des mises à jour.

La solution consiste à déclarer la même fonction mais avant que le fichier du plugin qui la contient soit chargé. C’est ici que se situe l’astuce, rien de plus simple quand on sait que wordpress propose un système de « must use plugins ». Il suffit de placer un fichier php dans le dossier « /wp-content/mu-plugins » (on crée le dossier si il n’existe pas). Ce fichier sera automatiquement chargé avant tous les autres plugins. On peux placer plusieurs fichiers, peu importe leur noms qui seront alors chargé dans l’ordre alphabétique. Appelons par exemple notre fichier « load.php » et remplaçons notre fonction :

if (!function_exists('la_fonction_du_plugin')) {
    function la_fonction_du_plugin() {
        //code modifié de la fonction
        //...
    }
}

C’est tout simple, encore faut il connaitre cette possibilité et l’existence des « must use plugins ». Bien sur on peux se servir de ce fichier pour excuter n’importe quel code avant que le reste ne soit chargé (plugins, thème)