# Une alerte quand un contenu approche le quota de 100 000 éléments d’un site

> 100 000 fiches, c'est le seuil où un hébergement ou un contrat commence à grincer ; mieux vaut le voir venir que le subir.

- Auteur : WordPress Développement
- Publié le : 2023-02-27
- Mis à jour le : 2023-02-27
- Catégorie : Astuces
- URL : https://www.wpmoderne.fr/tips/alerte-quota-100000-elements-site/

## L’essentiel

- Suivre le volume par type de contenu, pas seulement le total
- Alerter à 80 % du quota, pas à 100 %
- Croiser avec les limites réelles de l'hébergement ou du contrat

100 000, c'est un chiffre qui revient souvent : c'est la limite de nombreux forfaits d'hébergement mutualisé haut de gamme sur le nombre de lignes indexables, c'est aussi un seuil contractuel fréquent chez les prestataires de recherche externalisée, et c'est le point où `WP_Query` commence à montrer ses limites sans optimisation sérieuse sur les jointures de taxonomie. Quand un site de fiches produits, d'annonces ou de documents approche ce seuil, personne ne le sait tant que quelqu'un n'a pas eu la bonne idée de compter.

Le problème n'est pas technique au sens strict : WordPress gère très bien plusieurs centaines de milliers de contenus si la base est correctement indexée. Le problème est organisationnel. Le quota qui casse quelque chose n'est presque jamais dans le code, il est dans un contrat d'hébergement, une licence d'extension facturée au volume, ou un forfait de recherche tierce. Et ces contrats sont rarement relus au moment où le volume grimpe.

## Compter ce qui compte vraiment

La fonction native `wp_count_posts()` renvoie un objet avec le nombre de contenus par statut pour un type de contenu donné, mais uniquement pour ce type précis. Pour un total toutes taxonomies confondues, il faut sommer plusieurs appels ou passer par une requête SQL directe sur `wp_posts` filtrée sur les statuts pertinents.

```
function agence_total_contenus_publies() {
    global $wpdb;

    $types = array( 'post', 'page', 'produit', 'annonce', 'document' );
    $placeholders = implode( ',', array_fill( 0, count( $types ), '%s' ) );

    $sql = $wpdb->prepare(
        "SELECT COUNT(*) FROM {$wpdb->posts}
         WHERE post_status = 'publish'
         AND post_type IN ($placeholders)",
        $types
    );

    return (int) $wpdb->get_var( $sql );
}
```

Ce total brut ne suffit pas : ce qui compte pour l'alerte, c'est l'évolution dans le temps, pas la photographie à l'instant T. Un site qui gagne 2 000 fiches par mois n'a pas le même horizon de risque qu'un site qui en gagne 200.

## Construire une alerte qui anticipe

Un `wp_schedule_event()` quotidien qui stocke le total du jour dans une option dédiée, comparé au total d'il y a trente jours, donne une pente de croissance simple à calculer et suffisante pour projeter la date d'atteinte du quota.

> L'essentiel à retenir : Suivre le volume par type de contenu, pas seulement le total ; Alerter à 80 % du quota, pas à 100 % ; Croiser avec les limites réelles de l'hébergement ou du contrat

```
add_action( 'agence_verifier_quota_contenus', function () {
    $total = agence_total_contenus_publies();
    $historique = get_option( 'agence_historique_volume', array() );
    $historique[ current_time( 'Y-m-d' ) ] = $total;

    // Ne garder que les 90 derniers jours
    $historique = array_slice( $historique, -90, null, true );
    update_option( 'agence_historique_volume', $historique );

    $quota = 100000;
    $seuil_alerte = $quota * 0.8;

    if ( $total >= $seuil_alerte ) {
        wp_mail(
            'tech@agence.example',
            sprintf( '[Alerte volume] %d contenus publiés (seuil %d)', $total, (int) $seuil_alerte ),
            "Le site approche le quota contractuel de {$quota} contenus indexables.\nTotal actuel : {$total}."
        );
    }
} );

if ( ! wp_next_scheduled( 'agence_verifier_quota_contenus' ) ) {
    wp_schedule_event( time(), 'daily', 'agence_verifier_quota_contenus' );
}
```

### Choisir le bon seuil

Alerter pile à 100 000, c'est alerter trop tard : entre la détection et l'action (négociation avec l'hébergeur, purge de contenus obsolètes, changement de forfait), il faut compter plusieurs semaines dans une organisation classique. Un seuil à 80 % laisse une marge confortable, surtout combiné à la pente de croissance calculée sur l'historique stocké.

| Signal | Action recommandée |
| --- | --- |
| 80 % du quota, croissance stable | Planifier une revue de contrat dans le mois |
| 80 % du quota, croissance en accélération | Escalader immédiatement, revoir l'archivage |
| 95 % du quota | Geler les imports en masse en attendant la décision |

Un widget de tableau de bord via `wp_add_dashboard_widget()` qui affiche ce total et cette pente en un coup d'œil évite d'attendre le prochain e-mail d'alerte pour se poser la question. C'est aussi l'occasion de ventiler le volume par type de contenu : un site qui approche le quota à cause d'un CPT `brouillon_import` jamais nettoyé n'a pas le même problème qu'un site dont la croissance vient de vrais contenus publiés.

## Notre verdict

Un quota qui casse quelque chose n'est presque jamais une surprise technique, c'est une surprise de gestion. La correction ne demande ni extension ni réécriture d'architecture : un total calculé chaque jour, un historique de 90 points, un seuil à 80 % et un e-mail suffisent à transformer un incident de fin de contrat en décision anticipée. Le vrai coût de cette absence de suivi n'est jamais dans le code, il est dans la négociation en urgence d'un avenant de contrat un vendredi soir.
