ホームページ > バックエンド開発 > PHPチュートリアル > 設定のバックアップと復元のプロセスを簡素化する

設定のバックアップと復元のプロセスを簡素化する

王林
リリース: 2023-09-04 09:34:01
オリジナル
1630 人が閲覧しました

オプションは WordPress で最も重要なデータであり、さまざまな構成設定が保存されます (詳細を参照)。これらは、投稿やページなどの他の重要なデータと同様にデータベースにも含まれます。これらのオプションは、WordPress 自体またはユーザーによって日々変更できます。では、正確な値をすべて覚えておらずに、どのように構成して前の状態に戻すのでしょうか?

このチュートリアルでは、WordPress ブログの簡単なバックアップ/復元機能を作成する方法を説明します。この機能を使用すると、すべてのオプションを別の場所にバックアップでき、再構成することなく、いつでもそこから復元できます。


開始前

一般的に、この関数はデータをバックアップするエクスポート部分とデータを復元するインポート部分の 2 つの部分に分割されます。そこで、簡単なプラグインを作成してこれらを説明します。


ステップ 1 プラグインヘッダー

まず、WordPress にプラグインについて伝えるために数行を書く必要があります。

リーリー

結果は次のとおりです:

設定のバックアップと復元のプロセスを簡素化する


ステップ 2ページ管理者の作成

次に、上記の 2 つの主要な機能 (インポートおよびエクスポート機能を含む) を表示するプラグイン インターフェイスを配置する場所が必要です。そこで、管理セクションにページを生成します:

リーリー

ここに重要なポイントがいくつかあります:

  • WordPress の組み込み関数として add_menu_page を使用して、管理メニューのサイドバーに新しいトップレベルのメニュー セクションを追加します。ここで、ie_option_page パラメーターは、ページのコンテンツを出力します。
  • 2 つの主要な機能を異なるセクションに分割するには、add_submenu_page を使用して、上で作成したばかりのトップレベル メニューにそれらを追加します。ご覧のとおり、各関数には、add_menu_page 関数と同様に、出力を表示するコールバック関数もあります。それらを 1 か所に統合​​するかどうかは問題ではありません。ただ、明確にするように努めます。
  • 次に、register_ie_optionadmin_menu アクションにフックして、このアクションが呼び出されるたびにターゲットがトリガーされるようにします。

設定のバックアップと復元のプロセスを簡素化する


ステップ 3エクスポート関数の作成

次のようなエクスポート ページを作成する予定です:

設定のバックアップと復元のプロセスを簡素化する

エクスポート ページのスケルトンを作成する

リーリー

ボタンのあるフォームを作成し、ボタンがクリックされたかどうかを確認するだけです。さらに、利用可能な WordPress CSS クラスの一部を使用して説明テキストを追加します。セキュリティ チェックには、wp_nonce_field() 関数と check_admin_referer() 関数を使用します。WordPress Nonce について詳しくは、こちらをご覧ください。

生成されるファイル名を指定します

リーリー

ファイルに名前を付けるだけで、いつ、どこにエクスポートされたかを簡単に確認できます。

バックアップ オプションを取得し、JSON データとしてエンコードします

リーリー

これは重要なステップですので、注意してください:

  • get_alloptions() は、サイト上のすべてのオプションを取得し、配列として返す関数です (この場合は $options)。
  • すべてのオプションを取得すると、オプションの値がシリアル化されたデータになる可能性があるため、最初にそれを逆シリアル化する必要があります。
  • 私たちの目的は、バックアップ データを保存するための JSON を生成することです。 JSON は、テキスト情報を保存するための軽量かつ強力な方法です。したがって、必要なのはデータを JSON 構文に変換することだけです。json_encode はこの目標の達成に役立ちます。
リーリー

次に、JSON データの内容を 2 つの重要な関数 ob_clean()exit() でラップし、生成された JSON ファイルに json_file# のみが含まれるようにします。 ## 他のデータを含めずに JSON データを保存しました。ちなみに、ダウンロードダイアログを表示するためにヘッダーリクエストをクライアントに送信します。正しく動作させるには、プラグイン コードの先頭に ob_start() 関数を配置する必要があります。これにより、ヘッダー エラーの発生を防ぐことができます。WordPress コードのどこかに余分なスペースや行がある可能性があります。この状況を引き起こす可能性があります。 p>

「JSON (JavaScript Object Notation) は軽量のデータ交換形式です。人間にとっては読み書きが簡単で、機械にとっては解析と生成が簡単です。」

これは完全なエクスポート関数コードです:

リーリー


ステップ 4インポート関数の作成

このページのタスクは非常に単純です。アップロード フォームを表示し、JSON ファイル内のデータを解析してオプションをバックアップします。

创建导入页面骨架

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>Click Browse button and choose a json file that you backup before.</p>
		<p>Press Restore button, WordPress do the rest for you.</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='Restore'/>
			</p>
		</form>
	</div>
	<?php
}
ログイン後にコピー

与导出页面一样,我们创建了一个表单,但这次,我们添加了一个浏览按钮,以便用户可以选择他们想要的文件并提交。

验证和更新 JSON 文件

if (isset($_FILES['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>All options are restored successfully.</p></div>";
		}
		else {
			echo "<div class='error'><p>Invalid file or file size too big.</p></div>";
		}
	}
}
ログイン後にコピー

如果上传过程出错,只需返回一条死消息“发生错误”。如果没有,获取文件的扩展名和大小,将它们存储到变量中并检查它们。我们只接受扩展名为“.json”且大小小于 500000 字节的文件。如果文件不合适,则仅显示一条错误消息“文件无效或文件大小太大。”。 注意:您可以根据需要修改此尺寸。

然后,$encode_options变量将获取该文件的所有内容。由于文件中包含JSON数据,因此在使用之前我们必须先解码。为此,我们使用 json_decode 和具有 true 值的第二个参数,因此该函数返回一个数组值。有了数组值,我们就开始循环它。在每次迭代中,我们将使用相同的键及其值更新数据。最后,我们的所有选项都将完全恢复原样,并显示一条成功消息。

这是完整的导入功能代码:

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']; // Get the name of file
					$file_ext = strtolower(end(explode(".", $file_name))); // Get extension of file
					$file_size = $_FILES['import']['size']; // Get size of file
					/* Ensure uploaded file is JSON file type and the size not over 500000 bytes
 					 * You can modify the size you want
					 */
					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>All options are restored successfully.</p></div>";
					}
					else {
						echo "<div class='error'><p>Invalid file or file size too big.</p></div>";
					}
				}
			}
		?>
		<p>Click Browse button and choose a json file that you backup before.</p>
		<p>Press Restore button, WordPress do the rest for you.</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='Restore'/>
			</p>
		</form>
	</div>
	<?php
}
ログイン後にコピー

为您的模板或插件创建您自己的备份功能

在示例插件中,我使用 get_alloptions WordPress 函数备份了所有站点选项。如果您想将其应用于您自己的特定选项,只需这样做:

$options = array('your_option1_name' => get_option('your_option1_name'), 'your_option2_name' => get_option('your_option2_name');
$json_file = json_encode($options);
ログイン後にコピー

然后继续执行上述下一步。您可以自由选择要备份的选项!


结论

在本教程中,我们将概述创建简单的备份/恢复功能。您应该注意到,我的插件只是一个简单的示例,而不是官方的。我的目标不是写一个完美的插件,而是向你展示这个功能的基本原理。通过理解它,您可以在模板或插件上创建自己的功能,也可以根据需要使其灵活。因此,您可以为您的模板/插件隔离此功能。

我希望本教程对您有用,请告诉我您的想法。你的想法让它变得更好,甚至告诉我我的错误,你的反馈真的会有很大帮助。感谢您的阅读!


偏好:

  • JSON 函数
  • Header PHP
  • 编写 WordPress 插件
  • add_menu_page WordPress 函数
  • add_submenu_page WordPress函数
  • get_alloptions WordPress 函数

以上が設定のバックアップと復元のプロセスを簡素化するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート