Toute la documentation que j'ai rencontrée traite de la substitution de la fonction enfichable via votre plugin.
Et si vous faites plutôt du développement de thème?
My functions.php nécessite un autre fichier qui remplace la get_user_by()
fonction définie dans pluggable.php
.
Si j'omets l' if( function_exists() )
appel, j'obtiens l'erreur "Impossible de redéclarer ...".
Si j'inclus l' if( function exists() )
appel, je n'obtiens aucune erreur, mais bien sûr, ma fonction est alors ignorée, car la version enfichable existe.
Sur la base de l'impressionnant post de Dominic sur l'ordre de démarrage de WordPress , il est clair qu'il pluggable.php
est chargé avant votre thème functions.php
et ainsi de suite, ce qui explique l'erreur.
La question est donc - comment pouvez-vous tirer parti de cette belle architecture enfichable à partir d'un thème, sans recourir à l'écriture de plugins qui doivent ensuite être regroupés ou installés avec le thème?
Notes supplémentaires : Il semble donc que l'argument est que les thèmes ne devraient pas essayer de faire ce que font les plugins. Mais cet argument a plus de quatre ans (selon le numéro de Trac à 4 chiffres). Je serais ravi d'entendre certains frappeurs lourds si cette philosophie s'applique toujours, compte tenu de la topologie complexe du paysage de développement de thème d'aujourd'hui. J'aimerais croire que nous avons évolué depuis.
Contexte : Je développe une solution CMS unique pour un client, avec beaucoup de métadonnées personnalisées, la personnalisation du back-end Admin, le processus de connexion / authentification, les travaux. Et bien sûr, il y a le composant de conception - c'est là que la partie thème entre en jeu. Le fait est que ce ne sont tout simplement pas des composants réutilisables - ils ne s'appliqueront jamais à un autre client, ils ne seront jamais placés sous GPL et open source, et ils sont les plus certainement pas à distribuer / installer sur d'autres déploiements WordPress. Au mieux, il y aura quelques bonnes pratiques que je vais exploiter sur de futurs projets, mais ce sera strictement un travail de référence / copier-coller.
Pour moi, cela ne ressemble pas à un cas d'utilisation de plugins. Le thème est installé, peut-être un thème enfant de Twenty Eleven, peut-être un autonome, ses fonctions.php appelle dans une cargaison d'includes, chacune manipulant un aspect différent du CMS en question. Ensuite, les fichiers de modèle de thème utilisent des «balises de modèle» personnalisées définies dans les inclusions. Je ne veux pas que des fichiers de thème avec des dépendances sur certains plugins ou autres soient activés, etc. Cela n'a tout simplement pas de sens de créer de la complexité dans le système. Bien sûr, je peux le mettre dans le dossier des plugins à utiliser, mais cela ressemble toujours à un hack - en ce moment, tout ce qui a à voir avec les personnalisations faites pour ce projet est contenu dans wp-content/themes/my-theme/
. Je ne veux pas non plus avoir à envisager de rechercher des éléments dans certains dossiers de plugins également.
Ne vous méprenez pas. J'adore les plugins et je les utilise et les écris. Et j'utilise des plugins conjointement avec ce type de développement de thème hautement personnalisé lorsque le plugin est tiers et représente les meilleures pratiques bien au-delà de ce que je pourrais éventuellement déployer dans un délai raisonnable. Mais lorsque je dois modifier les fonctionnalités de base pour un scénario unique, je me tourne vers les crochets d'action, les crochets de filtre et j'aimerais pouvoir compter sur des fonctions enfichables pour le côté utilisateur et l'authentification.