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.

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.