Catégorie : PHASE 5 : Développement Full-Stack & Intégration

  • 🧩Création de mon Plugin PHP et Roadmap

    Ce que j’ai fait

    Transformer un site « statique » en une structure dynamique. Au lieu d’écrire du HTML à la main dans l’éditeur, j’ai développé un outil (un plugin) capable de générer l’affichage à partir de données structurées.

    1. Pourquoi créer un plugin plutôt que d’écrire dans les pages ?

    Au début, j’écrivais mon code HTML directement dans l’interface de WordPress.

    • Le problème : Si je voulais changer la couleur d’un bouton sur mes 10 fiches projets, je devais ouvrir 10 pages et faire 10 modifications manuelles. C’est long et très peu pratique.
    • La solution : Le plugin. Il sépare les Données (la liste des projets) du Rendu (le code HTML/CSS).

    2. Architecture du plugin portfolio-projets

    J’ai organisé mon code de manière modulaire sur le serveur:

    # Mon arborescence dans /wp-content/plugins/
    portfolio-projets/
    ├── portfolio-projets.php   # Le "Cerveau" 
    ├── assets/
    │   └── css/
    │       └── projets.css     # L'apparence des cartes
    └── includes/
        ├── data-projets.php    # La "Base de données" 
        └── shortcodes.php      # La "Logique" 

    A. data-projets.php

    C’est ici que je stocke mes informations. C’est un simple tableau PHP (array). Si je veux ajouter un projet, je rajoute juste un bloc dans ce fichier sans toucher au reste du site.

    <?php
    # On empêche l'accès direct pour la sécurité
    if (!defined('ABSPATH')) exit;
    
    function portfolio_get_projets() {
        return array(
            array(
                'emoji' => '🖥️',
                'titre' => 'Infrastructure Web Full-Stack',
                'description' => 'Déploiement Docker sécurisé sur Debian.',
                'badges' => array('Docker', 'Nginx', 'UFW'),
                'competences' => 'SysAdmin, DevOps'
            ),
            # Pour ajouter un projet, il suffit de copier-coller ce bloc
        );
    }
    

    B. shortcodes.php

    J’ai créé un Shortcode : [ mes_projets ]. Quand je tape ce mot-clé dans WordPress, il déclenche une boucle qui parcourt mon tableau de données et génère le HTML correspondant.

    Point crucial sur la sécurité (Faille XSS) : J’ai appris qu’on ne doit jamais afficher une donnée sans la « nettoyer ». J’utilise la fonction esc_html(). Si un pirate injectait du code malveillant dans mes données, WordPress le transformerait en simple texte inoffensif au lieu de l’exécuter dans le navigateur du visiteur.

    function portfolio_shortcode_projets() {
        $projets = portfolio_get_projets();
        ob_start(); # Capture le HTML
        
        foreach ($projets as $projet) { ?>
            <div class="carte-projet">
                <h3><?php echo esc_html($projet['emoji'] . ' ' . $projet['titre']); ?></h3>
                <p><?php echo esc_html($projet['description']); ?></p>
                <div class="badges">
                    <?php foreach ($projet['badges'] as $badge): ?>
                        <span class="badge"><?php echo esc_html($badge); ?></span>
                    <?php endforeach; ?>
                </div>
            </div>
        <?php }
        
        return ob_get_clean(); # Renvoie le HTML propre à WordPress
    }
    add_shortcode('mes_projets', 'portfolio_shortcode_projets');
    


    3. La Roadmap de mon projet

    Enfin, pour un portfolio, montrer du code ne suffit pas : il faut prouver qu’on sait s’organiser.

    J’ai donc créé une page « Roadmap » publique. En utilisant du CSS, j’ai mis en place un affichage visuel qui montre exactement quelles phases du projet sont terminées (✅), lesquelles sont en cours (🔧) et lesquelles restent à faire (⬚).

    Cependant, un nouveau problème s’est posé : mettre à jour cette roadmap manuellement (en modifiant le code HTML) est fastidieux. C’est exactement le même souci qui m’avait poussé à créer un plugin pour mes projets. En faisant des recherches, j’ai découvert qu’il était possible de créer sur WordPress un système de gestion sur mesure appelé CPT (Custom Post Type). Cela me permettrait de modifier ma roadmap directement depuis l’interface d’administration, aussi facilement que de publier un article. C’est une excellente piste d’amélioration que je garde de côté pour peaufiner mon portfolio une fois ce projet fil rouge terminé.

    Ce que j’ai compris

    L’écosystème WordPress est infini. Quand je suis bloqué ou que je trouve une tâche répétitive, il y a toujours une fonctionnalité avancée (comme les CPT) pensée pour résoudre ce problème de manière professionnelle.

    Le code « en dur » est un piège. Si je dois ouvrir le code source à chaque fois que je veux modifier un texte ou ajouter un projet, c’est que mon architecture est mauvaise.

    Séparer les données de l’affichage . Créer un plugin maison avec un système de shortcode permet de garder un site propre et facile à maintenir.

    Il ne faut jamais faire confiance aux données affichées. La fonction esc_html() est un réflexe obligatoire pour bloquer les failles XSS et empêcher l’exécution de scripts malveillants.

    La gestion de projet est aussi importante que le code. Maintenir une roadmap montre que je sais planifier mes tâches et que je suis conscient de ma « dette technique » (comme le fait de devoir passer aux Custom Post Types plus tard).

  • 🎨 Thème Enfant et Reprise de Contrôle avec PHP

    Ce que j’ai fait

    Mon infrastructure serveur sécurisée étant opérationnelle, il était temps de m’attaquer à l’apparence du site. Mon but : avoir un portfolio avec ma propre identité visuelle (couleurs, polices, mise en page).

    1. Pourquoi créer un « Thème Enfant » ?

    J’utilise le thème WordPress par défaut « TwentyTwentyFive ». L’erreur classique du débutant serait de modifier directement les fichiers de ce thème pour y mettre ses propres couleurs.

    Le problème : À la prochaine mise à jour de WordPress, le thème sera écrasé et tout mon travail sera perdu. La solution : Créer un « Thème Enfant » (Child Theme). C’est un dossier vide qui « hérite » de tout le design du thème parent, mais qui protège mes propres modifications.

    Je me suis connecté à mon serveur et j’ai tapé ces commandes pour créer la structure :

    cd /srv/portfolio/wp-content/themes
    mkdir twentytwentyfive-child
    cd twentytwentyfive-child

    J’ai ensuite créé le fichier de base, style.css, pour y définir mes variables de couleurs. Utiliser :root me permet de ne déclarer ma palette qu’une seule fois. Si je veux changer le thème entier plus tard, je n’aurai que 3 lignes à modifier !

    CSS

    /*
    Theme Name:   TwentyTwentyFive Child - Portfolio
    Template:     twentytwentyfive
    Version:      1.0.0
    */
    
    :root {
        --couleur-principale: #2C3E50; /* Bleu marine très professionnel */
        --couleur-secondaire: #E74C3C; /* Rouge pour les appels à l'action */
        --couleur-fond: #ECF0F1;
        --couleur-texte: #34495E;
        --border-radius: 8px;
    }
    
    body {
        background-color: var(--couleur-fond);
        color: var(--couleur-texte);
        font-family: -apple-system, sans-serif;
    }
    

    2. Le mur du « Full Site Editing » (FSE)

    C’est ici que j’ai rencontré mon premier vrai blocage en développement frontend. Je voulais structurer ma page d’accueil. En inspectant le code (touche F12), j’ai vu des classes HTML absurdes générées par WordPress, comme <div class="wp-block-post-template-is-layout-flow">.

    J’ai découvert que TwentyTwentyFive est un thème « FSE » (à blocs). Cela signifie qu’il n’y a pas de fichiers de code lisibles pour le design : tout est généré par l’éditeur web et caché dans la base de données. Pour un débutant c’est totalement incompréhensible et inutilisable.

    3. Reprendre le contrôle avec mon propre code PHP

    J’ai alors forcé WordPress à ignorer son système de blocs automatiques pour qu’il lise mes propres fichiers PHP.

    Pour cela, j’ai créé le fichier functions.php dans mon thème enfant. C’est le « cerveau » du thème. J’y ai écrit un filtre (template_include) qui dit à WordPress : « Si un visiteur est sur la page d’accueil, utilise mon fichier front-page.php« .

    <?php
    # Sécurité : empêche un hacker d'accéder directement à ce fichier
    if ( ! defined( 'ABSPATH' ) ) exit;
    
    // Je charge mon fichier style.css
    add_action( 'wp_enqueue_scripts', function() {
        wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' );
        wp_enqueue_style( 'child-style', get_stylesheet_uri(), array('parent-style') );
    });
    
    # Je force WordPress à utiliser MES templates PHP plutôt que ses blocs automatiques
    add_filter('template_include', function($template) {
        if (is_front_page()) {
            return get_stylesheet_directory() . '/front-page.php';
        }
        return $template;
    }, 99);
    

    4. Coder ma propre page d’accueil

    Libéré du système de blocs, j’ai pu créer mon fichier front-page.php et mon header.php.

    Dans mon menu de navigation, je n’ai pas écrit les liens « en dur » (comme href="http://venatictundra22.com/"). C’est une mauvaise pratique, car si je change de nom de domaine un jour, tous les liens seront morts. J’ai utilisé la fonction home_url() de WordPress, couplée à esc_url() pour la sécurité :

    <header class="site-header" style="background: var(--couleur-principale); padding: 1rem;">
        <nav style="max-width: 1200px; margin: 0 auto; display: flex; justify-content: space-between;">
            
            <a href="<?php echo esc_url( home_url( '/' ) ); ?>" style="color: white; font-weight: bold;">
                Portfolio
            </a>
            
            <ul style="display: flex; list-style: none; gap: 2rem;">
                <li><a href="<?php echo esc_url( home_url( '/' ) ); ?>" style="color: white;">Accueil</a></li>
                <li><a href="<?php echo esc_url( home_url( '/projets' ) ); ?>" style="color: white;">Projets</a></li>
            </ul>
            
        </nav>
    </header>
    

    Bilan de cette étape : J’ai compris la hiérarchie des templates WordPress. Je ne subis plus le code généré par l’outil, c’est moi qui décide exactement de ce qui s’affiche à l’écran.