# Galerie de chantier en bloc, filtrable par taxonomie, pour le BTP

> Concevoir un bloc de galerie qui filtre des photos de chantier par taxonomie plutôt que par un plugin de galerie générique, pensé pour le BTP.

- Auteur : WordPress Développement
- Publié le : 2020-05-10
- Mis à jour le : 2020-05-10
- Catégorie : Blocs Gutenberg
- URL : https://www.wpmoderne.fr/blocs/galerie-chantier-bloc-taxonomie-btp/

## L’essentiel

- Une taxonomie « phase de chantier » plutôt qu'une catégorie générique
- Un bloc dynamique qui interroge la médiathèque par terme
- Un rendu en grille sans dépendance à un plugin de galerie

Comment afficher plusieurs centaines de photos de chantier, prises sur des mois, sans transformer la médiathèque WordPress en fourre-tout illisible ? C'est la question posée par une entreprise de gros œuvre qui documentait chaque étape de ses chantiers en photo, sans aucun moyen simple de les retrouver ensuite par phase ou par corps de métier.

Ce billet détaille la conception d'un bloc de galerie filtrable par taxonomie personnalisée, plutôt que le recours à un plugin de galerie généraliste. Le poids des images et leur optimisation, sujet à part entière, relève d'un autre article et n'est pas traité ici.

## Pourquoi une taxonomie plutôt qu'un plugin de galerie

Les plugins de galerie du commerce organisent généralement les photos en albums plats, sans notion de filtre croisé. Sur ce projet, le besoin était différent : retrouver toutes les photos d'un chantier donné, à une phase donnée (terrassement, gros œuvre, second œuvre), pour un corps de métier donné (maçonnerie, électricité, plomberie).

Une taxonomie personnalisée hiérarchique, appliquée directement aux pièces jointes de la médiathèque, répond à ce besoin sans ajouter de dépendance externe. WordPress permet nativement d'attacher des taxonomies aux pièces jointes, un point souvent ignoré parce que rarement mis en avant dans la documentation courante.

## Déclarer la taxonomie sur les pièces jointes

```
register_taxonomy( 'phase_chantier', 'attachment', array(
    'label'        => 'Phase de chantier',
    'hierarchical' => true,
    'show_in_rest' => true,
) );
```

Une fois cette taxonomie déclarée, chaque photo importée dans la médiathèque peut recevoir un ou plusieurs termes : le nom du chantier, la phase, et le corps de métier concerné. L'équipe sur le terrain envoie ses photos par courriel à une adresse dédiée, qui les importe automatiquement avec les bons termes préremplis à partir de l'objet du message.

> L'essentiel à retenir : Une taxonomie « phase de chantier » plutôt qu'une catégorie générique ; Un bloc dynamique qui interroge la médiathèque par terme ; Un rendu en grille sans dépendance à un plugin de galerie

## Le bloc dynamique côté rendu

Le bloc expose un réglage simple dans le panneau latéral : le chantier concerné. Le rendu interroge ensuite la médiathèque filtrée par ce terme :

```
function afficher_galerie_chantier( $attributs ) {
    $photos = get_posts( array(
        'post_type'      => 'attachment',
        'post_status'    => 'inherit',
        'numberposts'    => 60,
        'tax_query'      => array(
            array(
                'taxonomy' => 'phase_chantier',
                'field'    => 'slug',
                'terms'    => $attributs['chantier'],
            ),
        ),
    ) );
    // construction du balisage de la grille
}
```

## Une arborescence de filtre pensée en amont

La hiérarchie retenue s'organise ainsi, du plus large au plus précis :

```
Chantier (terme parent)
├── Phase : terrassement
├── Phase : gros œuvre
│   ├── Corps de métier : maçonnerie
│   └── Corps de métier : charpente
└── Phase : second œuvre
    ├── Corps de métier : électricité
    └── Corps de métier : plomberie
```

Cette arborescence, pensée avant d'écrire la moindre ligne de code, a évité plusieurs allers-retours avec le client une fois le développement lancé. Une taxonomie mal structurée au départ se corrige difficilement une fois des centaines de photos déjà classées.

## Le réglage du bloc, côté panneau latéral

Le panneau de l'éditeur propose un simple menu déroulant listant les chantiers actifs, alimenté dynamiquement par une requête vers l'API REST WordPress plutôt que par une liste codée en dur, pour rester à jour dès qu'un nouveau chantier démarre :

```
const { chantiers } = useSelect( ( select ) => ( {
    chantiers: select( 'core' ).getEntityRecords( 'taxonomy', 'phase_chantier', {
        parent: 0,
        per_page: -1,
    } ),
} ), [] );
```

## Le filtre côté front, sans rechargement de page

- Un menu déroulant par phase, alimenté par les termes existants de la taxonomie
- Une requête à l'API REST WordPress à chaque changement de filtre
- Un rendu en grille CSS simple, sans bibliothèque de galerie tierce

> Face à une médiathèque appelée à grossir de plusieurs centaines de photos par an, on préfère toujours investir dans une taxonomie bien pensée plutôt que dans un plugin de galerie qui finira par montrer ses limites de tri.

## En résumé

Une taxonomie personnalisée appliquée aux pièces jointes, combinée à un bloc dynamique de rendu, offre un classement précis et durable pour une médiathèque de chantier volumineuse. Cette approche évite la dépendance à un plugin de galerie généraliste, tout en restant entièrement pilotable depuis l'éditeur natif de WordPress.
