Déployer des modifications de base WordPress avec un Installer

Vous avez déjà vécu cette situation où vous faites une petite modification dans le back-office, à répliquer sur l’environnement de votre collègue, sur la préproduction puis sur la production ?

Une todo floue répétée ou perdue, puis cette question à chaque nouveau ticket qu’on vous assigne : « Tu as bien modifié l’option N à true ? ».

Voici une méthode simplifiée, que j’ai piquée comme un sagouin au système d’installer de Magento, mais qui fait le boulot.

Partons sur l’exemple d’une configuration de site basique : vous utilisez des options WordPress pour administrer les URLs des réseaux sociaux sur votre projet, par exemple avec WPUOptions (EN).

On retrouve donc quelque part dans votre thème une structure similaire à cet exemple trèèès simplifié :

<?php $twitter_url = get_option('monprojet_social_twitter'); ?>
<a target="_blank" href="<?php echo esc_url($twitter_url) ?>">
    Twitter
</a>

Par confort, et pour éviter une configuration après coup, vous souhaitez que la valeur de monprojet_social_twitter soit déjà pré-remplie.

Nous allons donc créer un mu-plugin ( car on ne stocke pas les données clients dans un thème qui ne concerne normalement que l’apparence ) qui va contenir notre installer. Nommons-le « monprojet_social ».

Afin qu’il s’exécute au bon moment, on va attendre le hook wp pour le lancer. Ensuite, on va stocker dans une autre option ( tant qu’à faire ) la version en base de notre jeu de données.

Ainsi, on ira comparer à chaque fois la version en base, et si notre version d’installer est supérieure, elle sera exécutée puis mettra à jour notre valeur de référence.

<?php

/*
Plugin Name: [MonProjet] Social
Description: Script Installer pour les valeurs des réseaux sociaux
*/

add_action('plugins_loaded', 'monprojet_social_plugins_loaded');
function monprojet_social_plugins_loaded() {
    $opt = 'monprojet_social_version';
    $opt_version = get_option($opt);

    /* Verifions que la valeur stockée est un nombre */
    if (!is_numeric($opt)) {
        $opt_version = 0;
    }

    /* Version 1 */
    if ($opt_version < 1) {

        /* On met à jour la valeur de notre champ twitter */
        update_option('monprojet_social_twitter', 'http://twitter.com/Darklg');

        /* On donne à la base notre version actuelle */
        update_option($opt, 1);
    }

    /* Version 2 : Bah alors Kévin, et le https ? */
    if ($opt_version < 2) {

        /* On met à jour la valeur de notre champ twitter */
        update_option('monprojet_social_twitter', 'https://twitter.com/Darklg');

        /* On donne à la base notre version actuelle */
        update_option($opt, 2);
    }
}

Donc on s’assure que la DB est à jour, et qu’éventuellement les options ou changements se sont déroulés dans le bon ordre. On peut bosser sur des numéros de versions, des Timestamp Unix, ou carrément une date PHP au format YmdHis.

C’est évidemment perfectible, et je suis en train de travailler sur une version un peu plus user-friendly dans wpu_settings_version, mais ça dépanne bien.

Partager cet article

Laisser un commentaire

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