Le WordPress d'aujourd'hui, décodé pour les développeurs

Astuces

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.

Par WordPress Développement • 27 février 2023 • 4 min de lecture • Aucun commentaire
Une alerte quand un contenu approche le quota de 100 000 éléments d'un site

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é.

SignalAction recommandée
80 % du quota, croissance stablePlanifier une revue de contrat dans le mois
80 % du quota, croissance en accélérationEscalader immédiatement, revoir l’archivage
95 % du quotaGeler 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.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Partager :

À propos de l'auteur

WordPress Développement

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi