# Mettre un site WordPress en lecture seule pendant une migration

> Bloquez publications, commentaires et commandes le temps d'une migration de serveur, tout en laissant le site normalement consultable par les visiteurs.

- Auteur : Clément Hadrot
- Publié le : 2025-10-24
- Mis à jour le : 2025-10-24
- Catégorie : Tips
- URL : https://wpmoderne.dev.wordpress-developpement.fr/tips/site-wordpress-lecture-seule-pendant-migration/

## L’essentiel

- Le site reste visible, seules les écritures sont bloquées
- Une constante pour activer et désactiver le mode d'un coup
- Cas particulier des commandes WooCommerce à traiter

Migrer un site marchand d'un hébergeur à un autre pose un problème que le mode maintenance classique ne résout pas : couper l'accès au site pendant plusieurs heures fait perdre des ventes, mais laisser les visiteurs passer commande ou publier un commentaire pendant la synchronisation finale des données crée un risque bien pire, celui de perdre ces contenus lors de la bascule.

La solution retenue sur la dernière migration que j'ai menée pour un client de vente d'instruments de musique : un mode « lecture seule » qui laisse le site entièrement consultable, mais bloque toute écriture en base de données, du commentaire à la commande WooCommerce.

## Activer le mode via une constante

Une constante dans `wp-config.php` permet d'activer et de désactiver ce mode en une seule modification, déployable rapidement même sous pression le jour de la bascule :

```
define( 'SITE_LECTURE_SEULE', true );
```

## Bloquer les commentaires

Le filtre `preprocess_comment` intercepte la soumission avant tout enregistrement en base :

```
add_filter( 'preprocess_comment', function ( $commentaire ) {
    if ( defined( 'SITE_LECTURE_SEULE' ) && SITE_LECTURE_SEULE ) {
        wp_die(
            __( 'Le site est en maintenance technique, les commentaires sont temporairement désactivés.', 'mon-theme' ),
            '',
            [ 'response' => 503, 'back_link' => true ]
        );
    }

    return $commentaire;
} );
```

## Bloquer les commandes WooCommerce

Le hook le plus fiable pour intercepter une commande avant sa création reste `woocommerce_checkout_process`, qui permet d'ajouter une erreur bloquante avant validation, sans jamais laisser la commande atteindre la base :

> L'essentiel à retenir : Le site reste visible, seules les écritures sont bloquées ; Une constante pour activer et désactiver le mode d'un coup ; Cas particulier des commandes WooCommerce à traiter

```
add_action( 'woocommerce_checkout_process', function () {
    if ( defined( 'SITE_LECTURE_SEULE' ) && SITE_LECTURE_SEULE ) {
        wc_add_notice(
            __( 'La boutique est en maintenance technique. Merci de repasser votre commande dans quelques heures.', 'mon-theme' ),
            'error'
        );
    }
} );
```

Pour aller plus loin, masquer directement le bouton de commande sur la page panier évite au client d'arriver jusqu'au formulaire pour se voir bloqué à la dernière étape, ce qui est plus frustrant qu'un message affiché en amont :

```
add_filter( 'woocommerce_order_button_html', function ( $bouton ) {
    if ( defined( 'SITE_LECTURE_SEULE' ) && SITE_LECTURE_SEULE ) {
        return '<p>' . esc_html__( 'Commandes temporairement suspendues (maintenance).', 'mon-theme' ) . '</p>';
    }
    return $bouton;
} );
```

## Bloquer les formulaires génériques (contact, inscription)

Selon les extensions utilisées pour les formulaires (Contact Form 7, Gravity Forms ou un formulaire maison), un filtre équivalent doit intercepter la soumission avant son traitement. Pour un formulaire maison utilisant `admin-post.php`, la vérification se fait en tout début du gestionnaire :

```
add_action( 'admin_post_nopriv_envoyer_contact', function () {
    if ( defined( 'SITE_LECTURE_SEULE' ) && SITE_LECTURE_SEULE ) {
        wp_die( __( 'Formulaire temporairement indisponible.', 'mon-theme' ) );
    }
}, 5 );
```

## Ce que ce mode laisse volontairement passer

- La navigation et la consultation des pages, articles et fiches produit restent entièrement fonctionnelles.
- Les connexions au compte client restent possibles, pour consulter l'historique de commandes.
- Les caches de pages continuent de servir du contenu statique, sans surcharge supplémentaire côté serveur pendant la migration.

## Checklist du jour de bascule

1. Activer `SITE_LECTURE_SEULE` sur l'environnement source, au moins quinze minutes avant le début du transfert de base de données.
2. Vérifier manuellement qu'un commentaire test et une commande test sont bien bloqués avant de lancer l'export.
3. Effectuer la synchronisation finale (base de données et fichiers médias récents).
4. Basculer le DNS ou la configuration du répartiteur de charge vers le nouvel environnement.
5. Désactiver la constante uniquement sur le nouvel environnement, jamais sur l'ancien qui sera bientôt éteint.

> Le vrai risque d'une migration n'est presque jamais le transfert de fichiers, mais les quelques minutes où deux bases de données pourraient recevoir des écritures divergentes en parallèle.

## En résumé

Ce mode lecture seule, propre à chaque projet dans ses détails mais toujours basé sur le même principe, protège l'intégrité des données pendant la fenêtre critique d'une migration, sans sacrifier l'expérience de consultation pour les visiteurs qui ne cherchent qu'à parcourir le site.
