Le site
Les réglages du site
Le téléphone, l'adresse, les réseaux sociaux, le pied de page : des données qui n'appartiennent à aucune page. Elles se remplissent une fois et s'affichent partout.
Déclaration
Dans options/site.fields.php, avec exactement la même structure
que pour une page :
<?php
defined('ABSPATH') || exit;
return [
'contact' => [
'label' => 'Coordonnées',
'fields' => [
'phone' => ['type' => 'text', 'label' => 'Téléphone'],
'email' => ['type' => 'text', 'label' => 'Adresse e-mail'],
'address' => ['type' => 'textarea', 'label' => 'Adresse postale'],
],
],
'social' => [
'label' => 'Réseaux sociaux',
'fields' => [
'instagram' => ['type' => 'link', 'label' => 'Instagram'],
'linkedin' => ['type' => 'link', 'label' => 'LinkedIn'],
],
],
];Chaque groupe devient une section de l'écran Réglages du site, dans l'ordre où vous l'avez écrit.
Affichage
Les fonctions sont les mêmes que pour les champs de page, avec un préfixe distinct :
| Fonction | Rôle |
|---|---|
iron_option($chemin) |
La valeur, échappée |
iron_option_has($chemin) |
Vrai si l'option est remplie |
iron_option_image($chemin, $format, $attributs) |
Une balise image complète |
iron_option_image_url($chemin, $format) |
L'adresse seule |
iron_option_link($chemin, $attributs) |
Une balise de lien complète |
iron_option_rows($chemin) |
Les lignes d'une liste répétable globale |
iron_option_is_enabled($groupe) |
Vrai si la section est activée |
iron_option_raw($chemin) |
La valeur non échappée |
<footer class="site-footer">
<?php if (iron_option_has('contact.phone')) : ?>
<p><?= iron_option('contact.phone') ?></p>
<?php endif; ?>
<nav>
<?= iron_option_link('social.instagram', ['class' => 'social']) ?>
<?= iron_option_link('social.linkedin', ['class' => 'social']) ?>
</nav>
</footer>Le menu du site
Ironframe n'utilise pas les menus natifs de WordPress. Leur
écran exige la capacité edit_theme_options, qui ouvre aussi le
personnalisateur, les widgets et le changement de thème : la donner au client
rouvrirait tout ce que le rôle Client ferme.
À la place, options/header.fields.php déclare le logo du site et
une liste répétable de liens.
'header' => [
'label' => 'En-tête du site',
'fields' => [
'logo' => ['type' => 'image', 'label' => 'Logo'],
'items' => [
'type' => 'repeater',
'label' => 'Menu principal',
'max' => 8,
'label_add' => 'Ajouter une entrée',
'fields' => [
'link' => ['type' => 'link', 'label' => 'Lien'],
],
],
],
],
Le rendu se trouve dans templates/header_on_site.php. À défaut
de logo, le nom du site est affiché. Pour ajouter une entrée, le client passe
par Réglages du site → En-tête du site ; pour changer la
structure du menu, c'est au développeur de modifier le schéma.
Un exemple pris sur ce site
Le menu que vous voyez en haut de page vient de ce répétable. Le gabarit y
ajoute une seule chose : la comparaison du chemin de chaque lien avec l'URL
courante, pour poser aria-current sur la bonne entrée.
// La valeur d'une ligne est déjà échappée : on peut la comparer,
// pas l'afficher sans balise.
$url = $entree['link']['url'];
$path = trailingslashit(wp_parse_url($url, PHP_URL_PATH) ?: '/');
$attr = ['class' => 'site-nav__link'];
if ($path === $ici) {
$attr['aria-current'] = 'page';
}
echo iron_row_link($entree, 'link', $attr);Qui peut y accéder
L'écran est gouverné par une capacité dédiée,
iron_edit_options, accordée aux administrateurs, aux éditeurs et
au rôle Client.
Ce n'est pas manage_options : le client doit
pouvoir changer le téléphone du site sans obtenir au passage l'accès aux
réglages de WordPress.
Où c'est stocké
Une entrée par champ dans la table des options, nommée d'après le groupe et le champ, chargée automatiquement. Ces valeurs étant lues sur presque toutes les pages du site, le chargement automatique est ici justifié.