Back Up d’1 thème ou d’1 extension, mais pas la totale !

Publié le

par

Crédits Photo Do you have a back-up plan? by Images by John 'K', on Flickr

Hello, les plugins de back-up sont nombreux sur le WP repo.. Mais j’ai eu beau cherché (pas suffisamment sans doute..) j’en ai pas trouvé un qui convienne à mon besoin!

Je me suis attardé sur WordPress Backup qui permet à priori de sauvegarder la totale (thèmes, plugins, uploads..), j’ai parcouru cet article de blog dont l’idée d’utiliser DropBox me séduit assez et puis j’ai stoppé mes recherches pour concevoir le mien vite faitos 😉

Thème ou extension ?

En fait mon besoin n’est pas forcément de faire le backup d’un thème ou d’un plugin mais de pouvoir récupérer la dernière version testée sur une plateforme de dév ou de préproduction par exemple. Je pousse un peu plus l’explication : il peut arriver par exemple que parce qu’on développe sur un macbook on ne puisse pas immédiatement voir qu’un thème s’affiche étrangement ou qu’un plugin ait un comportement inattendu lorsqu’il est ouvert avec IE6 (il est carrément exclu que je virtualise Windows!)…

Or dans le cadre de mon taf, la majorité des postes sont encore équipés de ce navigateur, donc pour gagner du temps, j’édite directement le thème depuis l’interface d’édition de WordPress sur mon environnement de dév. Résultat : très vite le thème ou le plugin évolue et donc diffère de celui que j’avais initialement codé.

C’est là que mon plugin entre en action ! Je n’ai pas besoin de tout récupérer la plupart du temps : j’ai juste besoin du thème ou du plugin en question.

Récupérer le back up

Ainsi, après avoir sélectionné ce que je veux récupérer (thème ou extension), une liste des plugins ou des thèmes installés avec un bon vieux bouton radio devant chacun d’entre eux me permet de déclencher la création d’une archive zip ne contenant que l’arborescence du plugin ou du thème, que je récupère ensuite en cliquant sur le lien comme illustré ci-dessus. Il ne me reste plus qu’à utiliser l’uploader de thèmes ou de plugins fourni par WordPress pour la mise en production 😉

Rien de révolutionnaire, et étant donné qu’une palanquée de solutions de backup existent sur le WP repo, je ne l’ai pas soumis à WordPress.org.. Vous pouvez néanmoins le télécharger ici, si vous avez un besoin similaire au mien (WP single ou multi 3.0 à 3.1.1 compatible).

Intérêt de la classe PclZip

En créant cet utilitaire, je me suis amusé avec cette classe qui est incluse dans WordPress localisée sous /wp-admin/includes/class-pclzip.php. Ce que j’apprécie dans cette classe, au delà du fait qu’elle crée une archive zip, c’est que sur succès elle retourne un objet contenant le chemin complet vers le zip et surtout c’est qu’on peut indiquer l’arborescence à ne pas inclure dans l’archive.

Exemple d’utilisation issu du plugin qui est joint à ce post.

<?php
function imath_butp_zip_plugin( $plugin ) {
    require_once(ABSPATH . '/wp-admin/includes/class-pclzip.php');
    $plugin_data = explode('/',$plugin);

    if ( file_exists(IMATH_BUTP_DLD_DIR.'/'.$plugin_data[0].'.zip' ) ){
       unlink( IMATH_BUTP_DLD_DIR.'/'.$plugin_data[0].'.zip' );
    }

    $archive = new PclZip( IMATH_BUTP_DLD_DIR.'/'.$plugin_data[0].'.zip' );
    /**
     * L'option PCLZIP_OPT_REMOVE_PATH me permet de retirer toute l'arbo locale
     * pour ne garder que le répertoire de l'extension, ses sous-répertoires et
     * fichiers.
     * Pour cela, j'indique que pas besoin de WP_PLUGIN_DIR (constante WordPress
     * contenant l'arbo locale jusqu'au répertoire plugins)
     */

    $v_list = $archive->create( WP_PLUGIN_DIR . '/'.$plugin_data[0], PCLZIP_OPT_REMOVE_PATH, WP_PLUGIN_DIR );

    if( $v_list == 0 ) {
       die("Error : ".$archive->errorInfo(true));
    } else { 
       return $archive;
    }
 }
?>

Voilou.. je replonge dans mes explorations.. vous avez remarqué, on ne peut pas mettre à jour un plugin en utilisant l’uploader dans WordPress (il faut le supprimer pour le renvoyer)…

2 réponses à “Back Up d’1 thème ou d’1 extension, mais pas la totale !”

  1. Avatar de Mju
    Mju

    Very useful ! Soon the Perfect wp dev platform ! 😉