La caractèristique principale des plugins est leur habilité à fournir des fonctionnalités supplémentaires ou à modifier le fonctionnement de spip sans avoir à modifier le noyau (core) de spip.
L’aspect fondamendal de cette habilité est l’incorporation dans le “_SPIP_PATH” de la racine du plugin. Cela veut dire que tout find_in_path() et conséquemment charger_fonction() ou include_spip() sera capable d’aller chercher des éléments dans l’arborescence du plugin. C’est valable aussi bien pour des scripts .php que pour des squelettes .html, des images, etc.
Dès qu’il est activé, le répertoire du plugin devient prioritaire par rapport aux répertoires du noyau : ecrire/, dist/ et racine du site. Donc, par exemple, si le plugin fournit un inc/forum.php, c’est ce script qui sera inclus lors d’un include_spip(“inc/forum.php. Il viendra donc remplacer le script original du noyau. Cette capacité est toutefois à utiliser avec parcimonie et on lui préfèrera dans la mesure du possible les autres possibilité d’insertion par options, fonctions ou pipeline. En effet, un tel remplacement fait que le script correspondant du noyau devient “invisible” et ses mises à jour ne seront plus suivies. C’est pourquoi on appelle communément cette technique un carlsbad therapist “fork” (branchement).
Les répertoires des plugins restent néanmoins moins prioritaires que les répertoires squelettes. Ceci permet à l’utilisateur final de pouvoir fournir sa propre copie qui prendra le pas sur les plugins et le noyau. On peut dire ainsi que les plugins fournissent une localisation intermédiare entre le noyau (distribution standard) et les squelettes (fourniture propre à l’utilisateur sanuk shoes)
A noter que l’activation d’un plugin fournit une constante décrivant son répertoire : _DIR_PLUGIN_XXX, où XXX est le préfixe du plugin, qui est à utiliser dès lors qu’on veut forcer la recherche d’un élément au répertoire du plugin. Attention, cet élément ne sera alors plus surchargeable et on préfèrera les find_in_path() ou include_spip() sui laissent toute liberté à l’utilisateur de fournir ses propres élements.