texte), yb_parcours, yb_skills, yb_services (listes). */ /** Valeurs par défaut (= contenu de référence du design v3). */ function yb2026_profile_defaults() { return array( 'yb_identity' => array( 'poste' => 'Chargé support logiciel MCO', 'entreprise' => 'SeipraScore', 'casquettes' => 'Développeur web · Admin sys & réseaux', 'localisation' => 'Région lyonnaise', 'region' => 'Auvergne-Rhône-Alpes', 'ville_schema' => 'Lyon', 'email' => 'contact@exemple.fr', 'telephone' => '06 00 00 00 00', 'mobilite' => 'Permis B', 'hero_texte' => 'Support logiciel et maintien en conditions opérationnelles chez SeipraScore. Développeur web et admin Linux à côté, en continu.', 'apropos' => '', 'intro' => '', 'accroche' => 'Un projet ? Une question ? Un échange ?', ), 'yb_parcours' => array(), 'yb_skills' => array(), 'yb_services' => array(), ); } /** Description des champs de chaque répéteur : clé => [libellé, type]. */ function yb2026_profile_repeaters() { return array( 'yb_parcours' => array( 'title' => 'Parcours', 'help' => 'Du plus récent au plus ancien. La date et le lieu s\'affichent en majuscules automatiquement.', 'fields' => array('date' => array('Période', 'text'), 'titre' => array('Intitulé', 'text'), 'lieu' => array('Lieu / établissement', 'text'), 'desc' => array('Description', 'textarea')), ), 'yb_skills' => array( 'title' => 'Compétences techniques', 'help' => 'Barres de la page Qui suis-je. Pourcentage = remplissage de la barre (0 à 100).', 'fields' => array('name' => array('Compétence', 'text'), 'level' => array('Niveau', 'text'), 'pct' => array('%', 'number')), ), 'yb_services' => array( 'title' => 'Services (page Compétences)', 'help' => 'Cartes numérotées ( 01 ), ( 02 )… dans l\'ordre de la liste.', 'fields' => array('titre' => array('Titre', 'text'), 'desc' => array('Description', 'textarea')), ), ); } /** Libellés des champs d'identité. */ function yb2026_identity_fields() { return array( 'poste' => array('Poste', 'text', 'Kicker du hero, fiche Qui suis-je, données structurées.'), 'entreprise' => array('Entreprise', 'text', 'Badge de la nav (« @ ENTREPRISE »), hero, schema.org worksFor.'), 'casquettes' => array('Casquettes', 'text', 'Sous-titre du hero, avant la localisation.'), 'localisation' => array('Localisation', 'text', 'Volontairement large : pas de ville précise.'), 'region' => array('Région', 'text', 'Ajoutée après la localisation dans le footer, le menu mobile et le contact.'), 'ville_schema' => array('Ville (SEO uniquement)', 'text', 'Utilisée seulement dans les données structurées schema.org, jamais affichée.'), 'email' => array('E-mail', 'text', ''), 'telephone' => array('Téléphone', 'text', ''), 'mobilite' => array('Mobilité', 'text', ''), 'hero_texte' => array('Texte du hero (à droite)', 'textarea', 'Accueil, paragraphe au-dessus de « SCROLL TO EXPLORE ».'), 'apropos' => array('Texte « À propos » de l\'accueil', 'textarea', 'Section CODE. SERVEURS. RÉSEAUX. Les mots entre *astérisques* passent en lime.'), 'intro' => array('Intro de la page Qui suis-je', 'textarea', ''), 'accroche' => array('Accroche du bloc contact', 'text', 'Au-dessus de « TRAVAILLONS ENSEMBLE ».'), ); } /** Lecture d'une option du profil, fusionnée avec les valeurs par défaut. */ function yb2026_profile($option) { $defaults = yb2026_profile_defaults(); $value = get_option($option, null); if ($option === 'yb_identity') { return array_merge($defaults['yb_identity'], is_array($value) ? array_filter($value, 'strlen') : array()); } return is_array($value) ? $value : $defaults[$option]; } /** Raccourci : un champ d'identité. */ function yb2026_id($key) { $id = yb2026_profile('yb_identity'); return isset($id[$key]) ? $id[$key] : ''; } /** Localisation complète : « Région lyonnaise, Auvergne-Rhône-Alpes ». */ function yb2026_location_long() { $loc = yb2026_id('localisation'); $reg = yb2026_id('region'); return $reg ? $loc . ', ' . $reg : $loc; } /** « 06 00 00 00 00 » → « tel:+33600000000 ». */ function yb2026_tel_href($tel) { $digits = preg_replace('/\D/', '', (string) $tel); return 'tel:' . (strpos($digits, '0') === 0 ? '+33' . substr($digits, 1) : '+' . $digits); } /** Texte avec *mots* mis en lime (échappé). */ function yb2026_lime_marks($text) { return preg_replace('/\*([^*]+)\*/u', '$1', esc_html($text)); } /* ── Admin ──────────────────────────────────────────────────────────── */ add_action('admin_menu', function () { add_menu_page('Profil', 'Profil', 'edit_pages', 'yb-profil', 'yb2026_profile_page', 'dashicons-id-alt', 3); }); function yb2026_profile_page() { $identity = yb2026_profile('yb_identity'); ?>
Ces informations alimentent tout le site : hero, nav, Qui suis-je, Compétences, Contact, footer et données SEO.
Profil enregistré.