Aller au contenu principal
Version: 26.0.9.0

Template

L'attribut Template révolutionne la gestion des templates dans WordPress en remplaçant les fichiers de template traditionnels (comme page.php, single.php, archive.php) par une approche orientée objet basée sur des contrôleurs et des vues Twig.

Utilisation de base

app/Controllers/BlogController.php
use Elementum\Attributes\Template;

class BlogController extends Controller
{
    #[Template('front_page')]
    public function homePage()
    {
        $currentDate = date('d/m/Y');
        $readingTime = 5;

        return $this->render('@theme/front-page.html.twig', [
            'currentDate' => $currentDate,
            'readingTime' => $readingTime
        ]);
    }
}

Paramètres

Paramètre obligatoire

name

  • Type : string
  • Description : Identifiant du template
  • Valeurs courantes :
    • 'front_page' : Page d'accueil
    • 'home' : Page des articles
    • 'page' : Page simple
    • 'single' : Article unique (priorité à 100 par défaut pour laisser la possibilité de surcharger)
    • 'singular' : Post type unique. A utiliser pour tout autre CPT que les articles.
    • 'archive' : Page d'archive
    • 'post_type_archive' : Archive de type de contenu personnalisé
    • 'taxonomy' : Page de taxonomie
    • 'author' : Page d'auteur
    • 'search' : Page de recherche
    • '404' : Page 404

Paramètres optionnels

id

  • Type : string
  • Défaut : Généré automatiquement
  • Description : Identifiant unique du template
  • Recommandé : Spécifiez un ID explicite pour faciliter la maintenance

priority

  • Type : int
  • Défaut : 10 (sauf pour single qui est à 100)
  • Description : Priorité d'exécution du template
  • Utilisation : Contrôle l'ordre d'exécution des templates

params

  • Type : array
  • Défaut : []
  • Description : Paramètres supplémentaires pour le template
  • Exemple : ['post_type' => 'mon_type']

customTemplate

  • Type : string
  • Défaut : ''
  • Description : Nom du modèle personnalisé
  • Utilisation : Remplace les fichiers comme page-{template}.php

Cas d'utilisation courants

Page d'accueil personnalisée

#[Template('front_page')]
public function homePage()
{
    // Logique de la page d'accueil
    return $this->render('@theme/home.html.twig', [
        'featuredPosts' => $this->getFeaturedPosts()
    ]);
}

Archive de type de contenu personnalisé

#[Template('post_type_archive', params: ['evenement'])]
public function evenementArchive()
{
    $events = $this->getUpcomingEvents();

    return $this->render('@theme/archive-evenement.html.twig', [
        'events' => $events,
        'currentDate' => new \DateTime()
    ]);
}

Post type unique (CPT)

Utilisez singular (et non single) pour cibler le template d'un CPT autre que les articles natifs. single est réservé aux articles WordPress (post_type = 'post') et s'exécute avec une priorité de 100 pour permettre la surcharge.

#[Template('singular', params: ['project'])]
public function singleProject()
{
    return $this->render('@theme/single-project.html.twig');
}

Page avec modèle personnalisé

#[Template('page', customTemplate: 'a-propos')]
public function aboutPage()
{
    $teamMembers = $this->getTeamMembers();

    return $this->render('@theme/page-a-propos.html.twig', [
        'team' => $teamMembers,
        'companyHistory' => $this->getCompanyHistory()
    ]);
}

Bonnes pratiques

  • Nommage : Utilisez des noms de templates descriptifs et cohérents
  • ID uniques : Toujours spécifier un ID explicite pour faciliter le débogage
  • Documentation : Commentez les templates complexes ou nécessitant une attention particulière
  • Performance : Optimisez les requêtes dans les méthodes de contrôleur
  • Séparation des préoccupations : Gardez la logique métier dans les contrôleurs et le rendu dans les templates

Configuration requise

Assurez-vous d'avoir configuré correctement le fichier config/templates.yaml pour activer la gestion des templates personnalisés. Consultez la documentation de configuration pour plus de détails.

Remarques

  • Les templates sont chargés en fonction de leur priorité, du plus élevé au plus bas
  • Il est possible d'avoir plusieurs contrôleurs pour le même type de template avec des priorités différentes
  • Utilisez les namespaces pour organiser vos contrôleurs de manière logique