설정 백업 및 복원 프로세스 단순화

王林
풀어 주다: 2023-09-04 09:34:01
원래의
1584명이 탐색했습니다.

옵션은 WordPress에서 가장 중요한 데이터로, 다양한 구성 설정을 저장합니다(자세히 보기). 또한 게시물, 페이지 등과 같은 다른 중요한 데이터와 마찬가지로 데이터베이스에도 포함됩니다. 매일 이러한 옵션은 WordPress 자체 또는 사용자가 변경할 수 있습니다. 그렇다면 정확한 값을 모두 기억하지 않고 어떻게 이전 상태로 다시 구성합니까?

이 튜토리얼에서는 WordPress 블로그에 대한 간단한 백업/복원 기능을 만드는 방법을 보여 드리겠습니다. 이 기능을 사용하면 모든 옵션을 다른 위치에 백업하여 다시 구성할 필요 없이 언제든지 복원할 수 있습니다.


시작하기 전에

일반적으로 우리의 기능은 데이터 백업을 위한 내보내기 부분과 데이터 복원을 위한 가져오기 부분의 두 부분으로 나뉩니다. 그래서 간단한 플러그인을 만들어서 이를 보여드리겠습니다.


1단계 플러그인 헤더

먼저 WordPress에 플러그인에 대해 알리기 위해 몇 줄을 작성해야 합니다.

으아아아

결과는 다음과 같습니다.

설정 백업 및 복원 프로세스 단순화


2단계페이지 관리자 만들기

이제 위에서 언급한 두 가지 주요 기능(가져오기 및 내보내기 기능 포함)을 표시하는 플러그인 인터페이스를 배치할 장소가 필요합니다. 그래서 관리 섹션에 페이지를 생성합니다:

으아아아

다음은 몇 가지 핵심 사항입니다:

  • 우리는 add_menu_page 作为内置 WordPress 函数,在管理菜单侧边栏中添加新的顶级菜单部分,其中 ie_option_page을 사용합니다. 매개변수는 페이지 내용을 출력하는 데 사용되는 콜백 함수입니다.
  • 두 가지 주요 기능을 서로 다른 부분으로 분리하기 위해 동일한 add_submenu_page 将它们添加到我们上面刚刚创建的顶级菜单中。如您所见,每个函数还有一个回调函数来显示输出内容,就像 add_menu_page 기능을 사용합니다. 한 곳에 모아두셔도 상관없으며, 저는 단지 명확하게 유지하려고 노력합니다.
  • 그런 다음 이 액션이 호출될 때마다 타겟이 실행되도록 액션을 register_ie_option 挂钩到 admin_menu할 것입니다.

설정 백업 및 복원 프로세스 단순화


3단계내보내기 기능 만들기

다음과 같은 내보내기 페이지를 만들 계획입니다.

설정 백업 및 복원 프로세스 단순화

내보내기 페이지 뼈대 만들기

으아아아

버튼이 있는 양식을 만들고 버튼이 클릭되었는지 확인합니다. 또한 사용 가능한 WordPress CSS 클래스 중 일부를 사용하여 설명 텍스트를 추가합니다. 보안 점검을 위해 wp_nonce_field()check_admin_referer() 기능을 사용하고 WordPress Nonce에 대해 자세히 알아봅니다.

생성할 파일 이름을 지정하세요

으아아아

파일 이름을 지정하면 언제 어디서 내보냈는지 쉽게 확인할 수 있습니다.

백업 옵션을 받고 JSON 데이터로 인코딩

으아아아

이것은 중요한 단계입니다. 주의를 기울여 주십시오:

  • get_alloptions() 是一个获取站点上所有选项并将其作为数组返回的函数,在本例中为 $options.
  • 모든 옵션을 검색하면 옵션의 값이 직렬화된 데이터일 수 있으므로 먼저 역직렬화해야 합니다.
  • 우리의 목적은 JSON을 생성하여 백업 데이터를 저장하는 것입니다. JSON은 텍스트 정보를 저장하는 가볍고 강력한 방법입니다. 따라서 우리가 해야 할 일은 데이터를 JSON 구문으로 변환하는 것뿐입니다. json_encode 이 목표를 달성하는 데 도움이 됩니다.
으아아아

그런 다음 JSON 데이터의 내용을 두 가지 중요한 함수로 래핑합니다. 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿