Visite guidée du customizer
Pour faire simple et au cas vous n'auriez vraiment rien vu à ce sujet, c'est pour personnaliser son site.
Ça existe depuis WordPress 3.4 « Grant Green », en juin 2012. Rien que ça.
Personnaliser quoi ?
Si vous avez déjà jeté un œil au customizer, vous aurez vu que certains objets personnalisables existent par défaut :
- le titre du site et sa description ;
- les menus ;
- les widgets ;
- les options pour la page d'accueil statique.
Et si vous avez regardé ce que propose Twenty Seventeen, vous aurez aperçu d'autres objets personnalisables :
- les couleurs ;
- les options de mise en page…
Entrons un peu dans les détails.
Deux poids, deux mesures 𐄷
Il existe deux types d'objets personnalisables grâce au customizer : les options, et les modifications du thème.
Pourquoi ?
À cause du territoire des fonctionnalités 🗺, un concept qui doit vous parler si vous utilisez — voire crééz — des thèmes ou extensions régulièrement.
Pour résumer :
- une option est valable pour le site, indépendamment du thème actif : c'est le cas du titre du site, du slogan, etc.
- une modification de thème… Je ne vous fais pas un dessin 😇
Règle No ➊
- Dans un thème, vous ne devriez jamais déclarer d'option.
- Dans une extension, vous ne devriez jamais déclarer une modification de thème.
Mode d'emploi
Un objet personnalisable est composé de deux éléments, qu'on définit grâce à l'api du customizer.
Un réglage 📐
Il gère le comportement.
$wp_customize->add_setting('boosted_variant',
array(
'type' => 'theme_mod',
'capability' => 'edit_theme_options',
'default' => '',
'transport' => 'refresh'
)
);
Lecture : les réglages dans le handbook
Un contrôle 🗹
C'est l'interface dans le customizer.
$wp_customize->add_control('boosted_variant',
array(
'label' => __("Use Boosted's black variant", "boosted"),
'type' => 'checkbox',
'section' => 'title_tagline'
)
);
Lecture : les contrôles dans le handbook
Ce dont on ne parlera pas 🕴
Parce que flûte, c'est long et j'ai pas le temps !
Les panneaux 🚧
Nous pourrions évoquer les panneaux, qui permettent d'ajouter un niveau supplémentaire — comme c'est le cas pour les menus — mais en fait, non. Il est recommandé de ne pas s'en servir dans un thème.
Lecture : les panneaux dans le handbook
Les types personnalisés ♳
Il est également possibile de créer ses propres types de contrôles, si les champs existants ne suffisent pas. Mais c'est long, chiant, et documenté.
Lecture : les types personnalisés dans le handbook
Côté ux ⚗
Vous aurez peut-être remarqué un gros problème :
l'aperçu n'est rien qu'une grosse iframe
(sans vouloir l'offenser).
Ainsi quand vous modifiez ou enregistrez un réglage, la fenêtre se recharge complètement.
De plus, vous pouvez naviguer dans l'aperçu :
- changer de page,
- actionner des choses,
- ouvrir des menus,
- etc.
Autant de raison de se perdre dans cet entrelacs d'options !
Fonction d'appel ✆
Autrement connu sous le sobriquet de active_callback
active_callback
permet de définir une condition
pour l'affichage d'un réglage ou d'une section.
Et chose logico-magique, il mange des fonctions de template.
$wp_customize->add_section('boosted_archives', array(
'title' => __("Template for posts list", "boosted"),
'description' => __("Define how to display content lists", "boosted"),
'priority' => 105,
'capability' => 'edit_theme_options',
'active_callback' => function() {
return (is_archive() || is_home());
},
) );
Démo !
Rafraîchissement sélectif 🍨
Qu'on nomme aussi selective refresh
En définissant le transport du réglage sur postMessage
,
on peut lui attribuer un template partiel,
qu'on ciblera ensuite grâce à un sélecteur — jQuery —
et sera « rechargé » (via ajax) grâce à une fonction passée à render_callback
.
$wp_customize->get_setting('blogname')->transport = 'postMessage';
$wp_customize->selective_refresh->add_partial('blogname',
array(
'selector' => 'strong[itemprop="name"]',
'render_callback' => function () {
bloginfo('name');
},
)
);
Démo !
Revenons à nos moutons 🐑
Or donc, nous pouvons :
- naviguer sur le site dans le customizer,
- afficher les options et modificateurs disponibles pour la page affichée,
- et mettre à jour l'aperçu sans recharger la page.
Aurais-je omis de préciser que tout ceci fonctionne également avec les sidebars et widgets ?
Lesquels, depuis WordPress 4.8 « Evans »
peuvent contenir du texte riche, du son, de la vidéo, etc.
Vous me voyez venir là, ou pas ?
Hommage à Gutenberg 🖶
Laissez moi formuler ça
Pour un template donné, que nous affublerions de moults sidebars — mises en forme comme il se doit — nous pourrions alimenter en contenus riches n'importe quelle zone de la page affichée.
Et la méga classe : on peut permettre à un thème de rafraîchir sélectivement n'importe quel widget !
add_theme_support('customize-selective-refresh-widgets');
Démo !
Oui je sais, il faudrait affecter les sidebars à une page spécifique et pas simplement à un template…
Conclusion 💥
On peut aller encore plus loins, avec notamment :
- les
starter_content
: ils sont conçus spécialement pour ça ; -
le choix des couleurs et caractères de typographie proprement, en structurant son
css intelligement à base de
inherit
,currentColor
et autres--var()
; -
l'api JavaScript, qui sert par exemple :
- dans JetPack, à recharger un scroll infini dans un widget affichant un flux asynchrone ;
- dans TwentyThirteen, à réinitialiser une mise en page Masonry.
Alors, qu'est-ce qu'on attend ?
Merci
Et à bientôt ☺
Crédits
- Moteur de présentation : AccesSlide — par Access42 ;
- Pictogrammes : Rounded UI — par Marek Polakovic ;
- Typographie de titraille : Bello Pro — créée par Underware ;
- Typographie de labeur : Museo Slab — créée par Exljbris.