Dans quels buts ?

Lorsque l’on se lance dans le développement de thèmes WordPress, on passe pas mal de temps sur le fichier functions.php. Comme vous le savez, ce fichier sert à définir un panel de paramètres, de fonctions, d’actions et de filtres pour son propre thème. A force de rajouter des bouts de code et autres fonctions PHP, ce fichier devient très vite conséquent et difficile à relire et à modifier. Il est donc utile de définir des bonnes pratiques de développement pour ce fichier.

Externalisation du code :

Afin de garder un fichier lisible pour être facilement modifiable par la suite, externalisons les morceaux de codes dans plusieurs autres fichiers. Pour ma part, je crée un répertoire /php à la racine de mon thème (dans wp-content/themes/mon-theme/). Dans ce répertoires je place de simple fichiers php qui contienne mes bouts de code qui présente en plus l’avantage d’être ré-utiliser très facilement d’un projet à l’autre :

Ensuite, dans notre fichier functions.php, il suffit de créer une ligne par fichier requis via la fonction PHP : require_once :

// Customisation du theme
require_once('php/custom_theme.php'); 
// Custom Post Type 
require_once('php/custom-post-type/produit.php'); 
require_once('php/custom-thumbnail.php'); 
// Menus 
require_once('php/custom_menu.php'); 
// Sidebar pour les widgets 
require_once('php/custom_sidebar.php'); 
// Customsation du tyniMce 
require_once('php/custom_tynimce.php'); 
// Fonction spécifique 
require_once('php/form_validation.php');

Allons plus loin dans l’externalisation pour les Customs Post Type !

Comme vous pouvez le constater dans l’exemple de mon fichier functions.php ci-dessus, j’ai poussé l’externalisation des fonctions encore plus loin : En effet chaque type de post custom (Custom Post Type) est lui aussi externalisé dans un sous-dossier « custom-post-type » :

// Custom Post Type
require_once('php/custom-post-type/produit.php');

Conclusion

Notre fichier functions.php devient extrêmement clair et lisible. Et demain, si vous créez un autre thème pour un autre projet, il est aisé de piocher toutes les ressources nécessaires dans le dossier /php.