Le fichier functions.php de votre thème WordPress regorge de nombreux bouts de codes utiles pour apporter des fonctionnalités supplémentaires ou des modifications à votre site. Cependant, au fur et à mesure des ajouts, celui-ci s’alourdit, perd en lisibilité, et surtout, est lié au thème que vous utilisez actuellement. Changer de thème n’est pas un évènement rare, que vous utilisez un thème gratuit, premium ou réalisé sur mesure, et il faudra donc toujours penser à copier le contenu de votre functions.php pour conserver les fonctionnalités indispensables au bon fonctionnement du site. Pourquoi donc ne pas s’enlever cette contrainte de l’esprit ?
Pourquoi créer une extension spécifique
Créer une extension pour gérer les fonctionnalités indispensables de votre site à plusieurs avantages :
- Celles-ci ne sont plus liées au fichier functions.php du thème, elles resteront actives quelque soit le thème utilisé.
- Elle évite de rendre le site entier inaccessible en cas d’erreurs lors de l’ajout/copie d’un code. WordPress détectera le problème et désactivera l’extension, contrairement au même code dans functions.php qui bloquera le site.
- Cela permet une séparation claire entre les fonctionnalités spécifiques à un site, et les fonctionnalités spécifiques à un thème.
L’idée est donc intéressante, surtout quand l’on sait que tous les développeurs sont des fainéants : moins on en fait, mieux on se porte. Maintenant, la question légitime à se poser est de se demander quelles sont les fonctions qui appartiennent à une extension spécifique, et quelles sont celles qui appartiennent au functions.php ?
Que mettre dans l’extension, que mettre dans functions.php
Afin de séparer les différentes fonctions utilisées en deux parties, il est nécessaire de penser sur le long terme, et de définir toutes celles qui sont indépendantes de votre thème et de son aspect visuel. Voyons quelques exemples :
- Tous les custom post types et taxonomies que vous avez créées, et qu’il ne faut supporter pas voir disparaitre si vous changez de thème.
- Toutes les modifications apportées à l’administration de WordPress : personnalisation, masquage de certaines sections…
- Tous les shortcodes que vous avez pu mettre en place, et qui ne doivent pas disparaître avec un changement de thème.
- Activation des images à la une
Ces exemples devraient donc se retrouver dans l’extension que nous allons créer. Que reste-t-il dans le functions.php ? Toutes les fonctions liées à votre thème, à son ergonomie et son design. Là encore, on peut citer :
- Les menus personnalisés
- Les sidebars
- L’activation des images d’arrière-plan, d’en-tête gérées depuis l’administration
- Les tailles d’images supplémentaires créées avec add_image_size.
- Les différents styles et scripts intégrés avec wp_enqueue_style et wp_enqueue_script, et destinés au front.
Une fois la séparation effectuée, il ne reste plus qu’à créer l’extension qui va accueillir les fonctionnalités indépendantes. Pas d’inquiétude cela est simple et rapide.
Comment créer une extension pour votre site
La création d’une extension se fait en plusieurs étapes :
- Créez un nouveau dossier dans le dossier wp-content/plugins/ et donnez lui un nom du type votresite-fonctions.
- Dans celui-ci, créez un fichier nommé votresite-fonctions.php.
- Ouvrez le dans votre éditeur de code favori, et commencez par, sans oublier les balises php <?php et ?>
|
1 2 3 4 5 6 7 8 |
/* Plugin Name: Mes fonctions spécifiques Description: Toutes les fonctionnalités indispensables au site. Version: 0.1 License: GPL Author: Votre nom Author URI: l'adresse de votre site */ |
Vous pouvez ensuite y ajouter toutes les fonctions précédemment sélectionnées. Une fois terminé, il ne vous reste plus qu’à activer votre extension dans l’administration de WordPress.
Une bonne idée pour conserver un suivi des différentes modifications est de maintenir en parallèle un fichier readme.txt, où vous reporterez chaque changement, qui s’accompagneront d’un changement de version de l’extension.
Que pensez-vous de cette solution ?
De mon point de vue cette méthode très intéressante, à la fois en terme pratique, d’organisation et de gain de temps. Qu’en pensez-vous ? Allez-vous l’adopter, ou bien utilisez-vous déjà un autre système pour gérer vos fonctionnalités ?
15 Responses to “Créer une extension pour alléger le functions.php de votre thème”
Trackbacks/Pingbacks
- L’Hebdo WordPress : Android – WordPress 3.3 – BuddyPress | WordPress Francophone - [...] Rémy de The-loop.fr vous montre comment alléger votre fichier functions.php et comment créer une extension qui va le rendre ...

Excellente idée pour les développeurs, et surtout pour l’aspect pratique de l’évolution du site lors des mises à jour de WordPress et des thèmes.
Par contre, j’aurais plutôt tendance à déconseiller cette méthode pour le temps de chargement. Que que soit le cas de figure, le fichier functions.php est cherché puis chargé par WordPress. Enlever des éléments pour le mettre dans un autre fichier va donc ralentir (légèrement) le blog puisqu’il faudra une requête de plus pour exécuter le code complet de la page.
C’est en effet le moins de cette méthode, même si je ne connais pas l’impact réel en terme de performance pour une extension de ce type vs l’appel dans le fichier functions.php
J’ajouterais un conseil dans la création de ce plugin c’est cet article http://www.screenfeed.fr/blog/accelerer-wordpress-en-divisant-le-fichier-functions-php-0548/
Puis c’est vrai qu’il faudra une requête de plus pour charger les plugins. Maintenant, j’ai l’impression que le débat est comme si on hésitait entre une image de 5ko ou de 6ko, cela me semble improblable de détecter “à l’oeil” que les fonctions soient dans “functions.php” ou dans un plugin supplémentaire.
Optimiser WordPress est un travail de longue haleine, les slides de BeApi à la WordCamp Paris 2011 le démontrent bien.
Merci pour cet astuce sympathique !
En effet, je pense qu’en cumulant les 2 techniques, on peut obtenir un système à la fois souple, portable et plus léger.
Et d’ajouter au début du fichier functions.php l’appel à la fonction PHP require_once(‘votresite-fonctions.php.’).
Ainsi au chargement du fichier functions.php, les fonctionnalités supplémentaires seront chargées et nous avons une séparation précise (fichier différent) entre les fonctionnalités spécifiques et les fonctionnalités WP.
Ah tiens, c’est pas con du tout ça. Ce serait intéressant à voir en terme de performance par contre avec beaucoup de fonctions non ?
Aucun test à faire : plus tu as de fonctions, plus c’est lent. Fin du test.
Il est envisageable d’optimiser le chargement des fonctions avec la fonction PHP function_exists().
if ( ! function_exists(‘mafonction’)) {
require_once(votresite-fonctions.php);
}
Ainsi le fichier des fonctionnalités supplémentaires sera chargé à la demande.
LeMoussel de Seo Black Inside.
Le else est-il superflu?
d’autre part, quelle est cette fonction?
J’ai:
- le nom du dossier “monsite-fonctions
- le nom du fichier “monsite-fonctions.php”
me manque donc” mafonction”
Pour répondre aux 2 commentaires :
- le else est superflu si vous ne souhaitez pas qu’une autre action se fasse si la fonction “mafonction” n’existe pas
- dans ce cas précis, “mafonction” est une fonction que vous aurez créé précédemment et dont vous vérifiez l’existence
Mais cette méthode s’inscrit plutôt dans la méthode proposée par Article gratuit que dans celle décrite dans l’article.
Si on parle bien du fichier functions.php du thème, alors je pense qu’on peut se passer de vérifier l’existence car WordPress ne l’inclus jamais 2 fois et vous ne devez pas le faire une seconde fois non plus.
De plus, quand vous créer une fonction évitez ceci :
get_members()
mettez plutot
julio_motcle_obtenir_les_membres()
là ce serait pas de bol qu’elle existe
je vais aller plus loin et vous conseiller de ne rien rajouter dans functions.php ! ainsi vous pouvez changer de theme ou le mettre a jour sans pb.
et faites un plugin pour chaque fonctionnalité que vous voulez rajouter (nouveau shortcode, image size..)
quand aux pb de perf : un bon .htaccess associé a un plugin de mise en cache des pages voir cet article sur wp tutsplus et un bon serveur dédié , au pire mettre son contenu sur le cloud
Bonjour,
Comment cela se passe en multi-site !?
Est-ce que la méthode est toujours valable ?
A+
En toute logique oui