vendredi 25 septembre 2026

À propos

Contact

Tips

wp_get_environment_type : adapter WordPress à chaque environnement

Un email transactionnel parti par erreur depuis un environnement de recette vers un vrai client, ça marque durablement. La fonction native évite ce genre d'incident.

Par Clément Hadrot • 23 juin 2022 • 4 min de lecture • Aucun commentaire
wp_get_environment_type : adapter WordPress à chaque environnement

Un email de confirmation de commande parti depuis un environnement de recette vers l’adresse d’un vrai client, parce que la base de données de test contenait encore ses coordonnées réelles copiées depuis la production : c’est l’incident classique qui pousse à s’intéresser sérieusement à la distinction entre environnements. Depuis WordPress 5.5, une fonction native, wp_get_environment_type(), permet justement d’éviter ce genre de scénario sans dépendre d’une extension.

Cet article se concentre sur la définition de la constante WP_ENVIRONMENT_TYPE, son usage pour désactiver certains comportements hors production, et un indicateur visuel simple ; la mise en place de l’environnement de recette lui-même (hébergement, synchronisation de base de données) est un sujet à part entière.

Définir la constante dans wp-config.php

La constante WP_ENVIRONMENT_TYPE se déclare dans wp-config.php, avant la ligne qui charge le reste du cœur WordPress. Quatre valeurs sont reconnues nativement par le cœur : local, development, staging et production (valeur par défaut si la constante est absente).

define( 'WP_ENVIRONMENT_TYPE', 'staging' );

Sur un parc de plusieurs environnements, la meilleure pratique consiste à ne pas coder cette valeur en dur dans un fichier versionné, mais à la définir via une variable d’environnement système, lue ensuite dans wp-config.php :

define( 'WP_ENVIRONMENT_TYPE', getenv( 'WP_ENV' ) ?: 'production' );

Lire la valeur avec wp_get_environment_type

L'essentiel à retenir : WP_ENVIRONMENT_TYPE se définit dans wp-config.php ; wp_get_environment_type lit cette valeur partout dans le code ; Un indicateur visuel évite la confusion entre environnements

Une fois la constante définie, la fonction wp_get_environment_type() la restitue n’importe où dans le code, avec la même valeur normalisée quelle que soit la casse utilisée à la déclaration.

if ( 'production' !== wp_get_environment_type() ) {
    // Comportement réservé aux environnements non-production
}

Désactiver l’envoi d’emails hors production

L’usage le plus immédiat consiste à couper l’envoi réel des emails transactionnels hors production, remplacé par une simple journalisation, ce qui aurait évité l’incident cité en introduction.

function projet_bloquer_emails_hors_prod( $args ) {
    if ( 'production' !== wp_get_environment_type() ) {
        error_log( 'Email intercepté (hors production) : ' . $args['to'] );
        return array();
    }
    return $args;
}
add_filter( 'wp_mail', 'projet_bloquer_emails_hors_prod' );

Retourner un tableau vide depuis le filtre wp_mail empêche l’envoi effectif tout en laissant une trace exploitable dans les journaux, pratique pour vérifier que l’email aurait bien été déclenché sans polluer une vraie boîte de réception.

Empêcher l’indexation des moteurs de recherche

Un environnement de recette accessible publiquement finit toujours, tôt ou tard, par être indexé si rien n’en empêche l’exploration. Forcer le réglage « Décourager les moteurs de recherche d’indexer ce site » via code, conditionné à l’environnement, sécurise ce point même si quelqu’un décoche accidentellement la case dans les réglages.

function projet_forcer_noindex_hors_prod() {
    if ( 'production' !== wp_get_environment_type() ) {
        update_option( 'blog_public', 0 );
    }
}
add_action( 'init', 'projet_forcer_noindex_hors_prod' );

Afficher un indicateur visuel dans l’administration

Le risque de confusion humaine reste réel : un utilisateur qui travaille sur plusieurs environnements ouverts dans des onglets différents peut modifier du contenu sur le mauvais site sans s’en rendre compte. Un bandeau coloré dans la barre d’administration, affiché uniquement hors production, réduit sensiblement ce risque.

function projet_indicateur_environnement( $wp_admin_bar ) {
    $environnement = wp_get_environment_type();
    if ( 'production' === $environnement ) {
        return;
    }
    $wp_admin_bar->add_node( array(
        'id'    => 'indicateur-environnement',
        'title' => 'Environnement : ' . strtoupper( $environnement ),
    ) );
}
add_action( 'admin_bar_menu', 'projet_indicateur_environnement', 999 );

Ce que cette fonction ne fait pas

  • Elle ne synchronise ni ne bascule automatiquement une base de données entre environnements.
  • Elle ne remplace pas un fichier wp-config.php distinct par environnement pour les identifiants de base de données.
  • Elle ne protège pas physiquement un environnement de recette contre un accès public : cela reste du ressort de l’hébergement (authentification HTTP, restriction d’IP).

Sur chaque nouveau projet, je définis WP_ENVIRONMENT_TYPE dès la création du dépôt, avant même le premier commit de code métier : c’est l’un des rares réglages qu’il est plus coûteux d’ajouter après coup, une fois plusieurs comportements déjà câblés sans en tenir compte.

En résumé

wp_get_environment_type() et la constante WP_ENVIRONMENT_TYPE forment un mécanisme natif, disponible depuis WordPress 5.5, pour adapter le comportement du code selon l’environnement d’exécution. Emails coupés, indexation bloquée, indicateur visuel : trois usages simples qui, mis bout à bout, évitent la plupart des incidents liés à la confusion entre recette et production.

Partager :

À propos de l'auteur

Clément Hadrot

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

Voir tous ses articles

Dans la même veine

À lire aussi