Personnalisation d'un thème WordPressLe customizer de WordPress a été une des nouveautés de la mise à jour 3.4. Celui-ci permet aux développeurs de thèmes de proposer à leurs utilisateurs une interface pratique pour personnaliser les différents éléments d’apparence du site, tout cela en temps réel depuis l’administration. La documentation sur le support de cette fonctionnalité étant assez éparse, je vous propose aujourd’hui un tutoriel basé sur mon intégration du customizer au dernier thème que j’ai réalisé.

En tout premier lieu, toutes les fonctions qui vont suivre devront être ajoutées au fichier functions.php de votre thème, ou dans un fichier externe qui sera intégré via un include/require.

Etape 1 : afficher le customizer dans le menu Apparence

Par défaut, le customizer est caché dans le sous-menu “Thèmes” du menu “Apparence”, avec un bête lien “Personnaliser”. Afin de rendre cela plus accessible, nous allons créer un sous-menu “Personnaliser” du menu “Apparence” :

Le customizer en sous-menu de Apparence

Le customizer en sous-menu de Apparence

Etape 2 : créer la fonction et l’ajouter au hook

Nous allons ensuite créer la fonction qui s’occupe d’intégrer des réglages supplémentaires au customizer, et l’ajouter au hook correspondant :

Etape 3 : ajouter une section

Les réglages du système de personnalisation  sont divisés en section. Il en existe un certain nombre par défaut, qui s’afficheront si leurs fonctionnalités correspondantes sont actives sur le thème :

  • title_tagline - Titre et description du site
  • colors - Couleurs
  • header_image - Image d’en-tête
  • background_image - Image d’arrière-plan
  • nav - Menus de navigation
  • static_front_page - Page d’accueil
Mais il est possible d’en rajouter si on en a besoin. J’ai par exemple ajouté une section “Pied de page” (le code est à placer dans la fonction de l’étape 2) :
add_section() prend 2 arguments, le 1er est l’identifiant que l’on donne à la nouvelle section (qui sera utilisé par la suite), et le second un tableau comprenant :
  • title : le titre de la section
  • description (si on le souhaite) : sera ajouté en attribut “title” du titre
  • priority : détermine à quel endroit dans la liste des sections elle s’affichera
Nous voici donc avec une section supplémentaire
Section supplémentaire du customizer WordPress

Section supplémentaire du customizer WordPress

Etape 4 : ajouter les settings

Un setting est un élément qui pourra être utilisé dans votre thème. Grâce à la fonction add_setting(), WordPress s’occupera de lui même de créer, récupérer ou modifier l’élément. On va créer ici un setting qui permet de gérer l’affichage des crédits du thème.

add_setting() prend également 2 arguments de la même façon. Le 1er correspond à son identifiant, le second à un tableau de 4 paramètres :

  • default : une valeur par défaut si nécessaire
  • type : permet de déterminer de quelle façon est sauvegardé le réglage (option ou theme_mod)
  • capability : les permissions nécessaires pour qu’un utilisateur puisse modifier ce réglage
  • transport (optionnel) : postMessage permet d’activer la mise à jour en temps réel, au lieu de recharger la page (valeur par défaut refresh)
Notre réglage est enregistré, mais pour pouvoir l’utiliser il est nécessaire d’y ajouter un contrôle.

Etape 5 : ajouter les contrôles

Un contrôle va être un élément de formulaire qui va s’afficher et permettre la modification des réglages. Il en existe de plusieurs types, tels que “text”, “select”, “checkbox”, “radio” qui correspondent aux éléments classiques. Mais également des personnalisés comme “dropdown-pages” qui crée une liste déroulante des pages du site, ou encore un autre qui permet l’utilisation d’une roue de couleurs pour la sélection.

Prenons un exemple avec une checkbox pour mon réglage d’affichage des crédits du thème :

Toujours pareil, 2 paramètres pour add_control(), l’identifiant puis un tableau de 4 paramètres :

  • settings : correspond à l’identifiant créé auparavant avec add_setting
  • label : le label du champ de formulaire
  • section : la section à laquelle on rattache cet élément de réglage
  • type : le type de champ
Un contrôle dans le customizer

Le contrôle s’affiche maintenant dans sa section

Etape 4-5 bis : configuration avancée

Roue de couleurs

Je vous ai donné un exemple pour créer un contrôle avec un des types par défaut, mais il est possible d’aller plus loin. Comme je l’ai dit il existe une méthode pour afficher une roue de couleurs, mais cela diffère un peu :

Nous créons ici une instance de la classe WP_Customize_Color_Control, et qui permet l’affichage de la roue. Cette classe étend la classe WP_Customize_Control, celle qui s’occupe de l’affichage des contrôles. WP_Customize_Color_Control prend 3 paramètres :

  • $wp_customize, obligatoire
  • un identifiant pour le contrôle
  • un tableau de paramètres équivalent aux contrôles par défaut
Contrôle des couleurs dans le customizer

Affichage de la roue des couleurs

Contrôle personnalisé

Il est également possible de créer des contrôles personnalisés, pour ajouter de nouveaux éléments. Par exemple la zone de texte (textarea) n’est pas disponible par défaut, mais on peut la créer. Il faut tout d’abord créer une nouvelle classe, qui va étendre WP_Customize_Control, puis créer le contrôle qui l’utilise :

On y définit le type, et la fonction render_content() sert à créer le rendu HTML. Dans le contrôle, on fait comme d’habitude, en créant une instance de la classe nouvelle créée.

Création d'une zone de texte pour le customizer

Affichage de la zone de texte créée grâce à la nouvelle classe

Factorisation du code

Si vous ajoutez plusieurs réglages du même type dans la même section, il peut être une bonne idée de factoriser tout cela pour rendre votre code plus clair et plus efficace. Par exemple, je propose de nombreux réglages de couleurs dans mon thème, qui se trouvent tous dans la section “Couleurs” et utilisent tous la roue. Il est donc possible de factoriser de cette façon :

Tout d’abord nous créons un tableau nommé $colors, qui permettra de stocker les paramètres de chaque élément. Nous y ajoutons ensuite des valeurs :

  • slug : l’identifant qui sera utilisé où nécessaire dans add_setting() et add_control
  • default : pour la valeur par défaut dans add_setting
  • label : pour le label dans add_control
Et nous passons ce tableau dans une boucle foreach qui va créer un à un les contrôles en récupérant les valeurs stockées.

Etape 6 : afficher les modifications dans le thème

Pour afficher les modifications faites dans le thème, il est nécessaire de récupérer la valeur enregistrée dans la base de données. Cela se fait grâce à la fonction get_theme_mod(), qui prend 2 paramètres :

  • l’identifiant du réglage
  • une valeur par défaut
Pour l’affichage des crédits de mon thème, on l’utilisera de la manière suivante :

my_theme_credits peut avoir comme valeur TRUE ou FALSE (car c’est une checkbox). Si sa valeur est TRUE, on masque le texte, sinon, on l’affiche. La valeur par défaut est FALSE.

Si vous souhaitez faire des modifications sur l’apparence avec CSS, il vous faudra créer une fonction qui va injecter les styles dans le head de votre site, grâce au hook wp_head. Voici un exemple :

Etape 7 : activer l’affichage en temps réel

Pour activer l’affichage des modifications en temps réel, nous allons ici encore créer une fonction qui va s’appuyer sur jQuery pour faire les modifications,  et l’injecter avec le hook wp_footer. Pour rappel, il est nécessaire d’avoir définit la valeur “postMessage” à “transport” dans la fonction add_setting().

wp.customizer prend l’identifiant du réglage en paramètre. On définit ensuite la cible (ici la classe “wrap”) et la modification voulue (définir la valeur de background à “to” qui est la variable contenant la valeur hexadécimale de la couleur ici).

Cela doit être reproduit pour chaque réglage en temps réel voulu, et toutes les méthodes de jQuery sont utilisables.

Conclusion

Vous êtes maintenant en mesure de mettre en œuvre le customizer sur vos propres thèmes. Cela requiert un peu de temps avant d’en maitriser toutes les facettes, mais c’est un élément extrêmement pratique, et surtout intégré à WordPress par défaut. Il vient évidemment en réponse aux outils de personnalisation intégrés aux thèmes premium notamment, mais il permet une standardisation qui à mon avis est bénéfique à la fois pour les développeurs et les utilisateurs.

Alors, allez-vous l’utiliser dans vos prochains thèmes ?

Ressources utilisées pour la création de cet article

À propos de

J'intègre, je développe, je pluginise, je thémifie, je WordPress !

Site internet | Facebook | Twitter

3 Responses to “Utiliser le customizer de WordPress dans vos thèmes !”

  1. Ho ça déboite bien ça ! Je ne m’étais pas encore penché sur ce sujet donc je te remercie de m’avoir fait gagner ce temps précieux ;)

  2. Bien joué ! :)

    J’ai moi aussi utilisé le customizer dans un projet récent et comme tu le dis, la documentation est encore assez maigre (mais vues les sources de l’article, tu en as trouvé plus que moi ^^) et comme j’avais pas forcément le temps de fouiller tout le net à ce moment là, il y a quelques subtilités dont je n’étais pas au courant, comme “type” et “transport” pour add_setting(). Merci donc :)

    Ça faisait un moment que je voulais faire un article similaire et puis… Ben voilà quoi ^^

    Du coup, j’ai bien envie de faire un article qui ferait suite à celui-ci, mais sous la forme “astuces persos” plutôt, étant donné que la théorie/base est déjà là.

    Pour revenir au sujet, c’est vrai que quand tu présente ça au client, ça fait son petit effet “woaw” quand même :D
    Par contre je vois 2 inconvénients :
    - un thème avec beaucoup d’options, ça me parait pas simple au final. Peut-être il serait alors nécessaire d’ajouter une page de réglages supplémentaires dans ce cas, pour les “Réglages avancés”.
    - le côté multilingue me parait difficile aussi. En effet si tu veux ajouter du texte personnalisé dans le footer par exemple (en utilisant une textarea), il faut que ce texte soit traduisible, ce qui revient à avoir une textarea par langue, donc ça devient vite une usine (c’est déjà plus gérable dans une page complète de réglages) :(

    A+

    • Merci !

      Pour revenir sur les 2 inconvénients :
      - Oui en effet, et ce n’est pas toujours justifié de l’afficher dans le customizer. C’est pourquoi j’ai quand même conservé une page d’options en supplément, pour d’autres paramètres.
      - Je n’avais pas pensé à ça, mais tu as raison. Cela pourrait peut-être être géré via un un sélecteur qui affiche dynamiquement le bon champ, mais ça alourdit les choses très clairement. C’est pour ça que je pense que le customizer se limite (pour l’instant) à l’aspect graphique/présentation, et pas au contenu en lui-même.

Trackbacks/Pingbacks

  1. L’Hebdo WordPress : Twenty Twelve – WordPress 3.5 – Utilisateurs | WordPress Francophone - [...] à l’option de personnalisation qui permet de changer certains éléments en quelques clics. Si vous développez un thème suivez ...
  2. [TUTORIAL] Use the Customizer for classipress - [...] one of the new update 3.4. display the customizer in the Appearance menu. The tutorial is here: ...

Leave a Reply

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">