# Générer un numéro de dossier séquentiel pour chaque client d’un cabinet

> Un identifiant WordPress n'est pas un numéro de dossier fiable pour un cabinet. Voici comment attribuer un numéro séquentiel propre, à la création de chaque fiche.

- Auteur : WordPress Développement
- Publié le : 2023-01-14
- Mis à jour le : 2023-01-14
- Catégorie : Astuces
- URL : https://www.wpmoderne.fr/tips/generer-numero-dossier-sequentiel-client-cabinet/

## L’essentiel

- Compteur atomique stocké dans wp_options
- Attribution unique à la création, jamais recalculée
- Format personnalisable par année ou par préfixe

Comparer l'identifiant WordPress d'un contenu à un numéro de dossier client donne une fausse impression de simplicité : l'ID auto-incrémenté de la table `wp_posts` avance à chaque contenu créé sur le site, articles et pages compris, et surtout il n'est jamais garanti stable si une fiche est un jour supprimée puis recréée sous un autre identifiant.

Un cabinet d'avocats qui veut un référencement interne fiable a besoin d'un numéro dédié, propre aux fiches clients, attribué une seule fois à la création et qui ne change plus jamais ensuite, même si d'autres contenus sont ajoutés ou supprimés entre-temps sur le site.

## Pourquoi ne pas utiliser directement l'ID WordPress

Outre le risque de collision avec d'autres types de contenu, l'ID WordPress ne permet aucun format personnalisé : impossible d'y intégrer une année, un préfixe de cabinet ou une remise à zéro annuelle sans construire une numérotation distincte, stockée séparément.

## Un compteur stocké dans wp_options

> L'essentiel à retenir : Compteur atomique stocké dans wp_options ; Attribution unique à la création, jamais recalculée ; Format personnalisable par année ou par préfixe

La table `wp_options` permet de stocker un compteur global, incrémenté à chaque nouvelle fiche client créée, avec une protection contre les accès concurrents grâce à la fonction native `update_option()` couplée à une vérification avant écriture.

```
function generer_numero_dossier() {
    $dernier_numero = (int) get_option( 'cabinet_dernier_numero_dossier', 0 );
    $nouveau_numero = $dernier_numero + 1;

    update_option( 'cabinet_dernier_numero_dossier', $nouveau_numero, false );

    return sprintf( 'D-%04d', $nouveau_numero );
}

add_action( 'save_post_fiche_client', function( $post_id, $post ) {
    if ( $post->post_status !== 'publish' ) {
        return;
    }

    $numero_existant = get_post_meta( $post_id, 'numero_dossier', true );

    if ( empty( $numero_existant ) ) {
        update_post_meta( $post_id, 'numero_dossier', generer_numero_dossier() );
    }
}, 10, 2 );
```

La vérification `empty( $numero_existant )` est la clé du dispositif : elle garantit qu'un dossier déjà numéroté ne reçoit jamais un second numéro lors d'un enregistrement ultérieur de la fiche, par exemple après une simple correction du texte.

## Le risque des créations simultanées

Sur un cabinet avec plusieurs collaborateurs saisissant des fiches en même temps, deux enregistrements presque simultanés peuvent lire la même valeur avant l'incrémentation. Pour l'éviter réellement, mieux vaut passer par une requête SQL directe avec incrémentation atomique plutôt que par deux appels distincts.

```
global $wpdb;

$wpdb->query( "UPDATE {$wpdb->options}
    SET option_value = option_value + 1
    WHERE option_name = 'cabinet_dernier_numero_dossier'" );

$nouveau_numero = (int) $wpdb->get_var(
    "SELECT option_value FROM {$wpdb->options}
     WHERE option_name = 'cabinet_dernier_numero_dossier'"
);
```

## Choisir un format lisible

- Préfixe fixe du cabinet, utile en cas de fusion future avec un autre cabinet
- Année de création intégrée, pour un classement chronologique immédiat
- Zéros de tête pour un tri alphabétique cohérent avec le tri numérique

### Remise à zéro annuelle

Certains cabinets préfèrent repartir de un chaque nouvelle année, avec un format du type `2023-0001`. Il suffit alors de stocker le compteur sous une clé incluant l'année en cours, plutôt qu'une clé unique permanente.

> Un numéro de dossier qui change de format en cours d'année complique tous les classements papier existants : le format doit être figé avant la première fiche créée, pas ajusté après coup.

## Exposer le numéro dans les recherches et exports

Une fois attribué, le numéro de dossier mérite d'être rendu triable et filtrable directement dans la liste d'administration des fiches clients, via l'ajout d'une colonne personnalisée. Un cabinet qui recherche un dossier précis lors d'un appel téléphonique gagne un temps précieux à pouvoir trier par numéro plutôt que de parcourir un titre approximatif.

```
add_filter( 'manage_fiche_client_posts_columns', function( $colonnes ) {
    $colonnes['numero_dossier'] = 'N° dossier';
    return $colonnes;
} );

add_action( 'manage_fiche_client_posts_custom_column', function( $colonne, $post_id ) {
    if ( $colonne === 'numero_dossier' ) {
        echo esc_html( get_post_meta( $post_id, 'numero_dossier', true ) );
    }
}, 10, 2 );
```

## En résumé

Un compteur simple dans `wp_options`, protégé contre la double attribution, suffit à générer un numéro de dossier fiable et lisible, sans dépendre de l'identifiant technique de WordPress. L'archivage légal des dossiers, une fois le numéro attribué, répond à des obligations distinctes qui dépassent le cadre de cette seule numérotation.
