# Compter les candidatures reçues sur une offre sans jamais exposer les CV

> Un cabinet de recrutement souhaite afficher publiquement le nombre de candidatures reçues sur une offre, sans qu'aucune donnée personnelle du dossier ne soit accessible. Un compteur simple et une bonne séparation des données suffisent.

- Auteur : WordPress Développement
- Publié le : 2021-07-09
- Mis à jour le : 2021-07-09
- Catégorie : Astuces
- URL : https://www.wpmoderne.fr/tips/compter-candidatures-recues-offre-sans-exposer-cv/

## L’essentiel

- Le compteur n'accède jamais aux données du dossier de candidature
- Le nombre s'incrémente au moment du dépôt, sans requête de comptage répétée
- Aucun champ du formulaire de candidature n'est exposé publiquement

Un compteur affiché sur une offre d'emploi — « 34 candidatures reçues » — donne au visiteur une indication d'attractivité du poste, sans qu'il soit nécessaire d'exposer la moindre information sur les candidats eux-mêmes. La séparation entre cette donnée publique et les dossiers de candidature, strictement confidentiels, doit être totale dès la conception, pas ajoutée après coup en espérant qu'aucune fuite ne se produise.

La bonne pratique consiste à ne jamais faire calculer ce compteur en interrogeant la liste des candidatures à chaque affichage de la page, ce qui obligerait le code d'affichage public à côtoyer, même en lecture, des données qui devraient rester cantonnées à l'espace d'administration.

## Séparer strictement les deux types de données

Sur un type de contenu `offre_emploi`, un simple champ numérique `nombre_candidatures` stocke le compteur, complètement indépendant du type de contenu `candidature` qui, lui, contient les CV, lettres de motivation et coordonnées des candidats. Le code d'affichage public de l'offre n'a jamais besoin d'interroger ce second type de contenu.

## Incrémenter le compteur à la réception

Au moment où une candidature est enregistrée, généralement via un formulaire dédié, le compteur de l'offre associée est incrémenté d'une unité, sans jamais transmettre le contenu du dossier au processus d'affichage public :

> L'essentiel à retenir : Le compteur n'accède jamais aux données du dossier de candidature ; Le nombre s'incrémente au moment du dépôt, sans requête de comptage répétée ; Aucun champ du formulaire de candidature n'est exposé publiquement

```
function wpm_incrementer_compteur_candidatures( $offre_id ) {
    $compteur_actuel = (int) get_post_meta( $offre_id, 'nombre_candidatures', true );
    update_post_meta( $offre_id, 'nombre_candidatures', $compteur_actuel + 1 );
}

add_action( 'wpm_candidature_enregistree', 'wpm_incrementer_compteur_candidatures' );
```

Ce hook personnalisé `wpm_candidature_enregistree` se déclenche depuis la logique de traitement du formulaire de candidature, juste après l'enregistrement sécurisé du dossier, en transmettant uniquement l'identifiant de l'offre concernée, jamais les données du candidat.

## Afficher le compteur sur la fiche de l'offre

```
function wpm_afficher_compteur_candidatures( $offre_id ) {
    $nombre = (int) get_post_meta( $offre_id, 'nombre_candidatures', true );

    if ( $nombre > 0 ) {
        echo '<p>' . esc_html( $nombre ) . ' candidature(s) reçue(s)</p>';
    }
}
```

### Pourquoi ne pas compter les posts directement

Une alternative aurait consisté à exécuter une requête `WP_Query` comptant les candidatures liées à l'offre à chaque affichage de la fiche. Cette approche fonctionne techniquement, mais elle oblige la fonction d'affichage public à manipuler, même indirectement, une liste d'objets contenant des données personnelles, ce qui augmente la surface de risque en cas d'erreur de développement future — un simple oubli de restriction de champs pourrait exposer un email par accident.

## Protéger le champ candidature de toute exposition publique

- Le type de contenu `candidature` ne doit jamais être interrogeable publiquement, ni exposé dans l'API REST par défaut.
- Aucune requête sur ce type de contenu ne doit apparaître dans un template accessible sans authentification administrative.
- Le compteur reste la seule information dérivée des candidatures autorisée à transiter vers l'affichage public.

```
add_filter( 'rest_candidature_query', function ( $args ) {
    $args['post_status'] = 'private';
    return $args;
} );
```

## Gérer le retrait d'une candidature

Si un candidat retire sa candidature ou si une entrée est supprimée par erreur, le compteur doit être décrémenté symétriquement, sans jamais redescendre sous zéro :

```
function wpm_decrementer_compteur_candidatures( $offre_id ) {
    $compteur_actuel = (int) get_post_meta( $offre_id, 'nombre_candidatures', true );
    update_post_meta( $offre_id, 'nombre_candidatures', max( 0, $compteur_actuel - 1 ) );
}
```

> Conseil maison : concevez toujours un compteur public comme une donnée totalement indépendante de la source qu'il résume. Le jour où quelqu'un doit auditer la confidentialité du site, la séparation claire entre les deux types de contenu se vérifie en quelques minutes plutôt qu'en plusieurs jours.

## En résumé

Afficher un nombre de candidatures reçues n'exige aucun accès, même en lecture, aux dossiers eux-mêmes. Un compteur incrémenté au moment du dépôt, stocké séparément et jamais recalculé par interrogation directe des candidatures, garantit une confidentialité solide tout en donnant au visiteur une indication utile sur l'attractivité de l'offre.
