# Réinitialiser en un clic les réglages d’un site de démonstration commerciale

> Une maquette commerciale visitée par plusieurs prospects successifs doit toujours repartir du même état propre. Un bouton de réinitialisation évite le rebricolage manuel.

- Auteur : Clément Hadrot
- Publié le : 2025-10-23
- Mis à jour le : 2025-10-23
- Catégorie : Tips
- URL : https://wpmoderne.dev.wordpress-developpement.fr/tips/reinitialiser-un-clic-reglages-site-demonstration/

## L’essentiel

- Un tableau de valeurs de référence versionné dans le thème
- Une action déclenchée manuellement, jamais automatique en tâche de fond
- Toujours confirmer avant d'écraser les réglages actuels

Une agence spécialisée en immobilier de prestige gérait un site de démonstration montré à chaque prospect lors des rendez-vous commerciaux. Le commercial modifiait parfois quelques réglages en direct pour illustrer une fonctionnalité (changement de devise affichée, activation d'une bannière promotionnelle temporaire, changement de logo), sans toujours penser à tout remettre en état après la démonstration. Le prospect suivant découvrait alors une maquette dans un état incohérent.

La solution retenue : un bouton unique, accessible depuis le tableau de bord, qui restaure d'un coup un jeu d'options prédéfini, sans avoir à se souvenir de chaque réglage modifié pendant la démonstration précédente.

## Définir le jeu de valeurs de référence

Le point de départ consiste à lister explicitement, dans le code du thème (donc versionné et documenté, pas dans un fichier volatile), l'ensemble des options concernées et leur valeur de référence :

```
function immobilier_reglages_reference() {
    return array(
        'blogname'                => 'Prestige Habitat — Démonstration',
        'blogdescription'         => 'Maquette commerciale, ne pas modifier en dehors des rendez-vous',
        'devise_affichee'         => 'EUR',
        'banniere_promo_active'   => false,
        'theme_mods_logo'         => 'logo-defaut.png',
        'nombre_biens_par_page'   => 6,
        'devise_taux_conversion'  => 1,
    );
}
```

## L'action de réinitialisation

> L'essentiel à retenir : Un tableau de valeurs de référence versionné dans le thème ; Une action déclenchée manuellement, jamais automatique en tâche de fond ; Toujours confirmer avant d'écraser les réglages actuels

La restauration proprement dite passe par un point d'entrée `admin-post.php` classique, protégé par un nonce et une vérification de capacité stricte, car une exécution accidentelle écraserait des réglages en un instant :

```
add_action( 'admin_post_immobilier_reinitialiser_demo', function () {
    check_admin_referer( 'immobilier_reinitialiser_demo' );

    if ( ! current_user_can( 'manage_options' ) ) {
        wp_die( 'Action non autorisée.' );
    }

    foreach ( immobilier_reglages_reference() as $option => $valeur ) {
        if ( 'theme_mods_logo' === $option ) {
            set_theme_mod( 'logo', $valeur );
            continue;
        }

        update_option( $option, $valeur );
    }

    // Réactive le contenu de démonstration standard, désactive tout contenu ajouté ponctuellement
    immobilier_reactiver_biens_demo();

    wp_safe_redirect( admin_url( 'index.php?demo_reinitialisee=1' ) );
    exit;
} );
```

### Le bouton dans le tableau de bord, avec confirmation

```
add_action( 'wp_dashboard_setup', function () {
    wp_add_dashboard_widget( 'immobilier_reset_demo', 'Réinitialisation du site de démonstration', function () {
        $lien = wp_nonce_url(
            admin_url( 'admin-post.php?action=immobilier_reinitialiser_demo' ),
            'immobilier_reinitialiser_demo'
        );
        ?>
        <p>Utilisez ce bouton après chaque rendez-vous commercial pour remettre le site dans son état de référence.</p>
        <a class="button button-primary" href="<?php echo esc_url( $lien ); ?>"
           onclick="return confirm('Confirmez la réinitialisation : tous les réglages personnalisés seront écrasés.');">
            Réinitialiser la démonstration
        </a>
        <?php
    } );
} );
```

La confirmation JavaScript native (`confirm()`) reste volontairement simple ici : ce n'est pas une action fréquente au point de justifier une interface plus élaborée, et le message est suffisamment explicite pour éviter un clic accidentel.

## Réactiver un jeu de contenus de démonstration cohérent

Au-delà des simples options, la maquette contenait des fiches de biens immobiliers fictifs que le commercial pouvait désactiver temporairement pour illustrer un scénario précis (« Voici ce qui se passe quand un bien est vendu »). La fonction de réactivation restaure leur statut de publication d'origine, en s'appuyant sur une taxonomie technique dédiée qui marque les biens de démonstration :

```
function immobilier_reactiver_biens_demo() {
    $biens = get_posts( array(
        'post_type'   => 'bien_immobilier',
        'post_status' => array( 'publish', 'draft', 'private' ),
        'tax_query'   => array( array(
            'taxonomy' => 'jeu_demo',
            'field'    => 'slug',
            'terms'    => 'reference',
        ) ),
        'posts_per_page' => -1,
        'fields'         => 'ids',
    ) );

    foreach ( $biens as $id ) {
        wp_update_post( array( 'ID' => $id, 'post_status' => 'publish' ) );
    }
}
```

## Pourquoi pas une tâche planifiée automatique

Une réinitialisation automatique nocturne aurait semblé plus confortable, mais elle posait un risque réel : un commercial préparant une démonstration tôt le matin, avant l'exécution planifiée, aurait pu perdre son travail de préparation sans avertissement. Une action strictement manuelle, déclenchée consciemment après chaque rendez-vous, reste plus sûre pour ce cas d'usage précis, même si elle demande une discipline d'équipe.

- Ne réinitialisez jamais un site réellement utilisé par un client à partir de ce mécanisme : réservez-le strictement aux sites de démonstration internes.
- Versionnez le tableau de valeurs de référence avec le thème, pour qu'il évolue avec les mises à jour de la maquette elle-même.
- Ajoutez un horodatage de la dernière réinitialisation, visible dans le même widget, pour repérer un oubli entre deux rendez-vous.

> Sur un site de démonstration partagé par plusieurs commerciaux, je recommande toujours de rendre la réinitialisation aussi simple qu'un seul clic confirmé : toute friction supplémentaire finit par être contournée, et la maquette retrouve alors son état incohérent d'origine.

## Notre verdict

Un mécanisme de réinitialisation ciblé, basé sur un jeu de valeurs de référence explicite et versionné, règle durablement un problème récurrent d'incohérence sur les sites de démonstration à usage commercial partagé. Le coût de mise en œuvre reste faible comparé au temps perdu à corriger manuellement les réglages avant chaque nouveau rendez-vous.
