Nous avons créé un plugin vide dans l’étape 1 de cette série d’articles intitulée . Nous allons maintenant réaliser la cinquième étape : comprendre comment séparer le fichier php du plugin en plusieurs fichiers. 

 Que voulons-nous faire ?

Je veux nettoyer un peu ce que j’ai fait jusqu’à présent, en créant des fichiers php spécifiques à chaque fonction pour en simplifier la maintenance et la réutilisation.

Jusqu’à présent, j’ai toujours échoué à le faire, mais je crois que j’ai enfin compris pourquoi !

Répartitition d’un plugin en plusieurs fichiers

Je pense que le top du top serait d’écrire en php orienté objet, avec des classes, etc… Mais je ne me sens pas du tout à la hauteur pour l’instant. Ca demande trop d’abstraction pour moi actuellement.

Cependant, il faut tout de même que j’apprennes à bien structurer ce que je fais, pour ne pas perdre un temps fou à chaque fois qu’il faut faire une correction ou un ajustement.

Le répertoire de mon extension contient déjà plusieurs sous-répertoires, mais seul css contient un fichier (test css utilisé dans l’étape 2 de création de cette extension). Ce que je veux, c’est que le fichier lancé en premier par l’extension (ald-knowledge.php) ne contiennent que les éléments essentiels et que chaque fonctionnalité renvoit un fichier php spécifique qui sera rangé dans le répertoire « functions ».

répertoires d'un plugin

 

Quels sont les éléments essentiels d’un plugin ?

  •  ce qu’il faut faire lors de l’activation de l’extension sur un site  – fonction ald_knowledge_activation()
  • ce qu’il faut faire lors de la désactivation et la désinstallation – fonctions ald_knowledge_deactivation() et ald_knowledge_uninstall
  • informations pour trouver les répertoires sans que j’ai à taper tout le chemin à chaque fois
  • appel une fois de tous les fichiers complémentaires.

première étape : créer les fichiers des fonctionnalités spécifiques

Actuellement, le fichier  ald-knowledge.php contient le code pour trois fonctionnalités distinctes :

  1. ajouter du texte dans le pied de page du tableau de bord WordPress –> futur fichier « ald-admin-footer.php » ;
  2. ajouter des fichiers css, scripts ou polices au démarrage de WordPress –> futur fichier « ald-css-scripts-fonts.php » ;
  3. ajouter des shortcodes pour l’édition dans wordpress –> futur fichier « ald-shortcodes.php » ;

Je crée ces trois fichiers dans le répertoire functions.

Dans chaque fichier, je met un commentaire au début pour dire ce que c’est et à quoi ça sert. Pour définir ce que j’insère, je m’inspires de ce que met Tom McFarlin, un développeur américain réputé, et créateur du « WordPress plugin boilerplate« . J’avoue cependant que je ne comprends pas exactement comment peuvent être utilisés les éléments ainsi indiqués…

Pour le fichier principal, je met au début :

<?php
/**
 *
 * Le fichier principal du plugin. 
 * 
 * Ce fichier est lu par WordPress pour générer les informations sur l'extension dans le tableau de bord. 
 * Ce fichier sert également à inclure toutes les "dépendances" utilisées par l'extension, enregistrer
 * les fonctions d'activation, désactivation et démarrer le plugin. 
 * 
 * @link http://parcours-performance.com/anne-laure-delpech/#ald
 * @since 1.1.0
 * @package ald-functions
 *
 * @wordpress-plugin
 * Plugin Name: ALD fonctions pour wp-knowledge-base
 * Plugin URI: https://knowledge.parcours-performance.com/creer-plugin-wordpress-de-fonctionnalites-utiles/
 * Description: pour modifier le thème wp-knowledge-base sans créer de thème enfant 
 * Version: 1.1.0
 * Author: Anne-Laure Delpech
 * Author URI: http://parcours-performance.com/anne-laure-delpech/#ald
 * License: GPL2.0+
 * Text Domain: ald-functions
 * Domain Path: /languages
 */

Dans les fichiers « éclatés », je met (ici pour ald-admin-footer.php) :

<?php
/**
*
* Pour insérer du texte dans le pied de page de l'admin WordPress
*
* une méthode peu orthodoxe pour afficher en clair le résultat de certaines
* fonctions de WordPress telles que plugin_dir_path(), plugins_url(), ...
*
* @link http://parcours-performance.com/anne-laure-delpech/#ald
* @since 1.1.0
*
* @package ald-functions
* @subpackage ald-functions/includes
*/

Et je déplace le code spécifique dans ces fichiers.

Ces changements sont tous visibles dans un commit de GitHub.

Deuxième étape : donner un nom aux différents chemins qui vont être nécessaires

J’aurai régulièrement besoin de deux chemins différents :

  • l’un – plugin_dir_url(__FILE__) –  qui renvoie https://knowledge.parcours-performance.com/wp-content/plugins/ald-functions-knowledge-PP/
  • l’autre – – qui renvoie au chemin interne aux fichiers de wordpress : /home/parcoursz/knowledge/wp-content/plugins/ald-functions-knowledge-PP/

Pour éviter d’avoir chaque fois à retaper la bonne fonction, je met dans le fichier principal de l’extension :

et j’ai bien (je le vérifie dans mon pied de page !) ALD_KNOWLEDGE_DIR .’images/image.png’  qui affiche //home/parcoursz/knowledge/wp-content/plugins/ald-functions-knowledge-PP/images/image.png tandis que ALD_KNOWLEDGE_URL . ‘css/test.css’  affiche https://knowledge.parcours-performance.com/wp-content/plugins/ald-functions-knowledge-PP/css/test.css

Troisième étape : appeler les fichiers requis

J’utilise la fonction require_once :

require_once plugin_dir_path( __FILE__ ) . 'includes/ald-admin-footer.php'; 
require_once plugin_dir_path( __FILE__ ) . 'includes/ald-css-scripts-fonts.php'; 
require_once plugin_dir_path( __FILE__ ) . 'includes/ald-shortcodes.php';

Je vérifie bien que, dans le fichier principal,  j’ai enlevé toute références aux fonctions déplacées dans d’autres fichiers. Puis j’actualise ma page wordpress !  Et ça fonctionne ! J’ai bien des fonctions stockées dans un autre répertoire qui s’exécutent.

Ces changements sont tous visibles dans un autre commit de GitHub.

Conclusion :

Notre plugin est maintenant éclaté en plusieurs fichiers dont le nom permet de comprendre facilement le rôle. Il est plus facile à maintenir.  Le prochain article de cette série  concernera l’internationalisation du plugin (rendre possible les traductions sans aller dans le code).

Print Friendly, PDF & Email
0 0 votes
Évaluation de l'article
0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x