Créer un plugin simple de sauvegarde / restauration pour WordPress

Publié le 23 juin 2012 par Theussef @TheUssef

Télécharger les fichiers sources

Les options sont les données les plus importantes dans WordPress, elles stockent plusieurs paramètres de configuration (voir plus). Ils sont également contenues dans la base de données comme les autres données importantes telles que les articles, pages, etc… Jour après jour, ces options peuvent être modifiées par WordPress lui-même ou les utilisateurs. Alors, comment les configurer revenir à un état précédent sans mémoriser chaque valeur exacte?

Dans ce tutoriel, je vais vous montrer comment créer une sauvegarde simple / fonction de restauration pour votre blog WordPress. Grâce à cette fonctionnalité, vous pouvez sauvegarder toutes les options à un autre endroit, que vous pouvez les restaurer à partir à tout moment sans les configurer à nouveau.

Avant de Commencer

En général, notre fonction aura deux sections, l’une est une section d’exportation pour la sauvegarde des données et une section d’importation pour la restauration des données. Donc, je vais le démontrer ces options par la création d’un simple plugin.

Étape 1 tête Plugin
Tout d’abord, je dois écrire quelques lignes afin de décrire mon plugin pour WordPress

/*
Plugin Name: I/E Option
Plugin URI: http://www.japprend.com/
Description: Ceci est un simple plugin de Sauvegarde/restauration des options WordPress.
Author: Youssef MALLOUK
Version: 1.0
Author URI: https://twitter.com/TheUssef
*/

Et voici notre résultat:

Etape 2 Création de la page d’administration

Maintenant nous avons besoin d’un endroit pour mettre notre interface de plugin, il montre deux caractéristiques principales qui ont été mentionnés ci-dessus (y compris les fonctionnalités d’importation et d’exportation). Donc, je génère une page dans la section admin:

function register_ie_option() {
	add_menu_page('IE Option Page', 'IE Option', 'activate_plugins', 'ie-option', 'ie_option_page', '', 76);
	add_submenu_page('ie-option', 'Import', 'Import', 'activate_plugins', 'ie-import-option', 'ie_import_option_page');
	add_submenu_page('ie-option', 'Export', 'Export', 'activate_plugins', 'ie-export-option', 'ie_export_option_page');
}

function ie_option_page() {
	// Nos paramètres ici
}

function ie_import_option_page() {
	// Les options de restauration
}

function ie_export_option_page() {
	// les options de sauvegarde
}
add_action('admin_menu', 'register_ie_option');

Voici quelques points:

  • Nous utilisons add_menu_page comme une fonction intégrée de WordPress pour ajouter une nouvelle section du haut niveau de menu dans la barre latérale de menu admin et où le paramètre est ie_option_page la fonction de rappel pour délivrer le contenu de la page.
  • Afin de séparer les deux principales caractéristiques en différentes sections, nous utilisons add_submenu_page pour les ajouter au menu de haut niveau nous venons de créer ci-dessus. Comme vous le voyez, chaque fonction a aussi une fonction de rappel pour afficher le contenu de sortie comme la fonction add_menu_page fait. Il ne compte, si vous fusionnez ces derniers dans un seul endroit, je viens de tenter de maintenir la clarté.
  • Ensuite nous allons essayer pour raccorder register_ie_option à l’action admin_menu afin de déclencher notre objectif à chaque fois cette action est appelée.

 Étape 3 Créez l’option de Sauvegarde

Je compte créer une page d’exportation comme celle-ci:

 Créer la Squelette d’exportation :

function ie_export_option_page() {
	if (!isset($_POST['export'])) { 
?>
		<div class="wrap">
			<div id="icon-tools" class="icon32"><br /></div>
	        <h2>Sauvegarder</h2>
	        <p>Lorsque vous cliquez le boutton<tt>Sauvegrader</tt> , le systéme va générer un ficheir JSON pour que vosu l'enrgeistrer sur votre ordinateur.</p>
	        <p>Ce ficheir contient toutes les paramétres de cnfiguration de votre site web, <b>Noter</b> que ça n'enregistre pas les articles, les pages,etc .. c'es tjuste vos paramétre de configuration </p>

            <form method='post'>
	        <p class="submit">
            	<?php wp_nonce_field('ie-export'); ?>
	        	<input type='submit' name='export' value='Sauvegarder'/>
	        </p>
            </form>
	    </div>
<?php 
  	} elseif (check_admin_referer('ie-export')) {

		//Faites quelques chose si le bouton de sauvegarde a été cliqué
	}
}

Nous venons de créer un formulaire avec un bouton et vérifiez si le bouton est cliqué ou non. En outre, nous ajoutons un peu de texte d’instruction en utilisant une classe CSS disponibles WordPress. Pour faire une vérification de sécurité, j’utilise un wp_nonce_field () et le check_admin_referer () , en savoir plus sur nonces WordPress.

Nommer le nom de fichier doit être généré

$blogname = str_replace(" ", "", get_option('blogname'));
$date = date("m-d-Y");
$json_name = $blogname."-".$date;

Juste le nommer le fichier de sorte que vous pouvez facilement savoir où et quand il a été exporté.

Obtenez des options de sauvegarde et coder données en  JSON

$options = get_alloptions();

foreach ($options as $key => $value) {
	$value = maybe_unserialize($value);
	$need_options[$key] = $value;
}

$json_file = json_encode($need_options);

Voici l’étape la plus  importante,alors faites attention SVP :

  • get_alloptions () est une fonction qui reçoit toutes les options sur votre site et les retourne comme un tableau, $ options dans ce cas.
  • En récupérant toutes les options, la valeur des options peuvent être données sérialisées, nous devons donc le dé-sérialiser dans un premier temps.
  • Notre objectif est de générer JSON pour stocker les données de sauvegarde. JSON est un moyen léger et puissant pour stocker des informations de texte. Donc, ce que nous devons faire est de convertir nos données à la syntaxe JSON, json_encode nous aide à atteindre cet objectif.
ob_clean();
echo $json_file;
header("Content-Type: text/json; charset=" . get_option( 'blog_charset'));
header("Content-Disposition: attachment; filename=$json_name.json");
exit();

Ensuite, nous emballons le contenu de nos données JSON entre les deux fonctions importantes, ob_clean () et exit () pour assurer notre fichier généré JSON ne contient que des données JSON par json_file détient sans aucune autre donnée.

Voici donc le code de sauvegarde :

function ie_export_option_page() {
	if (!isset($_POST['export'])) { 
?>
		<div class="wrap">
			<div id="icon-tools" class="icon32"><br /></div>
	        <h2>Sauvegarder</h2>
	        <p>Lorsque vous cliquez le boutton<tt>Sauvegrader</tt> , le système va générer un ficheir JSON pour que vosu l'enrgeistrer sur votre ordinateur.</p>
	        <p>Ce ficheir contient toutes les paramètres de cnfiguration de votre site web, <b>Noter</b> que ça n'enregistre pas les articles, les pages,etc .. c'es tjuste vos paramètre de configuration </p>

            <form method='post'>
	        <p class="submit">
            	<?php wp_nonce_field('ie-export'); ?>
	        	<input type='submit' name='export' value='Sauvegarder'/>
	        </p>
            </form>
	    </div>
<?php 
  	} elseif (check_admin_referer('ie-export')) {

		$blogname = str_replace(" ", "", get_option('blogname'));
		$date = date("m-d-Y");
		$json_name = $blogname."-".$date; // On nomme le ficheir généré

		$options = get_alloptions(); // On retourne un tableau qui contient toutes les options/paramètres 

		foreach ($options as $key => $value) {
			$value = maybe_unserialize($value);
			$need_options[$key] = $value;
		}

		$json_file = json_encode($need_options); // Encodage des données dans un fichier JSON.

		ob_clean();
		echo $json_file;
		header("Content-Type: text/json; charset=" . get_option( 'blog_charset'));
		header("Content-Disposition: attachment; filename=$json_name.json");
		exit();
	}
}

Étape 4 Créer la fonction d’Importation

Cette page affichera un formulaire d’upload d’un fihier JSon afin de restaurer nos paramètres :

Créer une Squelette d’Importation 

function ie_import_option_page() {
	?>
	<div class="wrap">
		<div id="icon-tools" class="icon32"><br /></div>
		<h2>Import</h2>
		<?php
			if (isset($_FILES['import'])) {
				// Do something if a file was uploaded
			}
		?>
		<p>Cliquer le bouton parcourir et choisir le fichier JSon que vous avez sauvegardé précédement.</p>
        <p>Cliquer sur Restaurer et WOrdpresse s'enchargera du reste.</p>
        <form method='post' enctype='multipart/form-data'>
	        <p class="submit">
              	<?php wp_nonce_field('ie-import'); ?>
            	<input type='file' name='import' />
	        	<input type='submit' name='submit' value='Restaurer'/>
			</p>
		</form>
	</div>
	<?php
}

Comme la page d’exportation, nous créons un formulaire, mais cette fois, nous ajoutons un bouton Parcourir afin que l’utilisateur peut choisir le fichier qu’ils veulent et de le soumettre.

Validation et mise à jour du fichier JSON

if (isset($_FILES['import']) & check_admin_referer('ie-import')) {
				if ($_FILES['import']['error'] > 0) 
					wp_die("Error happens");		
				else {
					$file_name = $_FILES['import']['name'];
					$file_ext = strtolower(end(explode(".", $file_name)));
					$file_size = $_FILES['import']['size'];
					if (($file_ext == "json") & ($file_size < 500000)) {
						$encode_options = file_get_contents($_FILES['import']['tmp_name']);
						$options = json_decode($encode_options, true);
						foreach ($options as $key => $value) {
							update_option($key, $value);	
						}
						echo "<div class='updated'><p>Toutes les otpions sont correctement restaurées.</p></div>";
					}	
					else 
						echo "<div class='error'><p>Fichier incorrecte ou  sa tailel est plus grande.</p></div>";
				}
			}

Si le processus de téléchargement reçoit des erreurs, il suffit de retourner un message die « Une erreur s’est produite». Si non, obtenir l’extension et la taille du fichier, de les stocker dans des variables et de les vérifier. Nous acceptons uniquement les fichiers qui portent l’extension « . Json » et la taille de moins de 500000 octets. Si le fichier n’est pas un lieu, d’afficher simplement un message d’erreur « fichier non valide ou taille de fichier trop gros. ». Remarque: Vous pouvez modifier cette taille que vous avez besoin.

et voilà le code complet du fonction de restauration :

function ie_import_option_page() {
?>
	<div class="wrap">
		<div id="icon-tools" class="icon32"><br /></div>
        <h2>Import</h2>
        <?php
			if (isset($_FILES['import']) & check_admin_referer('ie-import')) {
				if ($_FILES['import']['error'] > 0) 
					wp_die("Error happens");		
				else {
					$file_name = $_FILES['import']['name'];
					$file_ext = strtolower(end(explode(".", $file_name)));
					$file_size = $_FILES['import']['size'];
					if (($file_ext == "json") & ($file_size < 500000)) {
						$encode_options = file_get_contents($_FILES['import']['tmp_name']);
						$options = json_decode($encode_options, true);
						foreach ($options as $key => $value) {
							update_option($key, $value);	
						}
						echo "<div class='updated'><p>Toutes les otpions sont correctement restaurées.</p></div>";
					}	
					else 
						echo "<div class='error'><p>Fichier incorrecte ou  sa tailel est plus grande.</p></div>";
				}
			}
		?>
        <p>Cliquer le bouton parcourir et choisir le fichier JSon que vous avez sauvegardé précédement.</p>
        <p>Cliquer sur Restaurer et WOrdpresse s'enchargera du reste.</p>
        <form method='post' enctype='multipart/form-data'>
	        <p class="submit">
              	<?php wp_nonce_field('ie-import'); ?>
            	<input type='file' name='import' />
	        	<input type='submit' name='submit' value='Restaurer'/>
	        </p>
        </form>
    </div>
<?php
}

Créer votre propre fonction de sauvegarde  pour vos modèles ou plugins : 

Dans le plugin échantillon, j’ai sauvegardé toutes les options du site en utilisant la fonction get_alloptions WordPress. Si vous souhaitez l’appliquer à des options spécifiques, il suffit de faire comme ceci:

$options = array('your_option1_name' => get_option('your_option1_name'), 'your_option2_name' => get_option('your_option2_name');
$json_file = json_encode($options);

Et passer à l’étape suivante comme ci-dessus. Vous choisissez librement les options que vous souhaitez sauvegarder!

Conclusion

Dans ce tutoriel, nous prenons un coup d’oeil sur la création d’un simple plugin de sauvegarde / restauration. Vous remarquerez que mon plugin est juste un échantillon simple  et n’est  pas d’une langue officielle. Mon but n’est pas d’écrire un plugin parfait, mais de vous montrer les principes de base de cette fonctionnalité. En le comprenant , vous pouvez créer vos propres plugins pour  vos modèles ou autres, vous pouvez également le rendre aussi souple que vous le souhaitez. Par conséquent, vous pouvez mettre cette fonctionnalité isolé pour vos modèles / plugins.

Références: