Inhaltsverzeichnis
Bevor Sie beginnen
Erstellen Sie ein Skelett für die Exportseite
Export
Nennen Sie den zu generierenden Dateinamen
Erhalten Sie Sicherungsoptionen und kodieren Sie sie als JSON-Daten
创建导入页面骨架
Import
验证和更新 JSON 文件
为您的模板或插件创建您自己的备份功能
结论
偏好:
Heim Backend-Entwicklung PHP-Tutorial Vereinfachen Sie den Prozess des Sicherns und Wiederherstellens von Einstellungen

Vereinfachen Sie den Prozess des Sicherns und Wiederherstellens von Einstellungen

Sep 04, 2023 am 09:33 AM

Optionen sind die wichtigsten Daten in WordPress, sie speichern verschiedene Konfigurationseinstellungen (siehe mehr). Sie werden ebenso wie andere wichtige Daten wie Beiträge, Seiten usw. in die Datenbank aufgenommen. Diese Optionen können von Tag zu Tag von WordPress selbst oder vom Benutzer geändert werden. Wie können Sie sie also auf ihren vorherigen Zustand zurücksetzen, ohne sich jeden genauen Wert zu merken?

In diesem Tutorial zeige ich Ihnen, wie Sie eine einfache Sicherungs-/Wiederherstellungsfunktion für Ihren WordPress-Blog erstellen. Mit dieser Funktion können Sie alle Ihre Optionen an einem anderen Ort sichern, von wo aus Sie sie jederzeit wiederherstellen können, ohne sie erneut konfigurieren zu müssen.


Bevor Sie beginnen

Im Allgemeinen wird unsere Funktionalität in zwei Teile unterteilt, einen Exportteil zum Sichern von Daten und einen Importteil zum Wiederherstellen von Daten. Deshalb werde ich diese demonstrieren, indem ich ein einfaches Plugin erstelle.


Schritt 1 Plugin-Header

Zuerst muss ich ein paar Zeilen schreiben, um WordPress von unserem Plugin zu erzählen.

/*
Plugin Name: I/E Option
Plugin URI: https://code.tutsplus.com
Description: This is a sample plugin with backup and restore options feature.
Author: Lee Pham
Version: 1.0
Author URI: http://twitter.com/leephamj
*/
Nach dem Login kopieren

Hier sind unsere Ergebnisse:

Vereinfachen Sie den Prozess des Sicherns und Wiederherstellens von Einstellungen


Schritt 2Seitenadministrator erstellen

Jetzt brauchen wir einen Platz für unsere Plugin-Schnittstelle, die die beiden oben genannten Schlüsselfunktionen anzeigt (einschließlich Import- und Exportfunktionen). Also erstelle ich eine Seite im Admin-Bereich:

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() {
	// Our stuff here
}

function ie_import_option_page() {
	// Content Import Feature
}

function ie_export_option_page() {
	// Content Export Feature
}
add_action('admin_menu', 'register_ie_option');
Nach dem Login kopieren

Hier sind einige wichtige Punkte:

  • Wir verwenden add_menu_page 作为内置 WordPress 函数,在管理菜单侧边栏中添加新的顶级菜单部分,其中 ie_option_page Der Parameter ist die Rückruffunktion, mit der der Seiteninhalt ausgegeben wird.
  • Um die beiden Hauptfunktionen in verschiedene Teile zu unterteilen, verwenden wir dieselbe add_submenu_page 将它们添加到我们上面刚刚创建的顶级菜单中。如您所见,每个函数还有一个回调函数来显示输出内容,就像 add_menu_page-Funktion. Es spielt keine Rolle, ob man sie an einem Ort zusammenführt, ich versuche nur, es klar zu halten.
  • Wir werden dann register_ie_option 挂钩到 admin_menu die Aktion so ausführen, dass unser Ziel jedes Mal feuert, wenn diese Aktion aufgerufen wird.

Vereinfachen Sie den Prozess des Sicherns und Wiederherstellens von Einstellungen


Schritt 3Exportfunktion erstellen

Ich habe vor, eine Exportseite wie diese zu erstellen:

Vereinfachen Sie den Prozess des Sicherns und Wiederherstellens von Einstellungen

Erstellen Sie ein Skelett für die Exportseite

function ie_export_option_page() {
	if (!isset($_POST['export'])) {
		?>
		<div class="wrap">
			<div id="icon-tools" class="icon32"><br /></div>
			<h2 id="Export">Export</h2>
			<p>When you click <tt>Backup all options</tt> button, system will generate a JSON file for you to save on your computer.</p>
			<p>This backup file contains all configution and setting options on our website. Note that it do <b>NOT</b> contain posts, pages, or any relevant data, just your all options.</p>
			<p>After exporting, you can either use the backup file to restore your settings on this site again or another WordPress site.</p>
			<form method='post'>
				<p class="submit">
					<?php wp_nonce_field('ie-export'); ?>
					<input type='submit' name='export' value='Backup all options'/>
				</p>
			</form>
		</div>
		<?php
	}
	elseif (check_admin_referer('ie-export')) {
		// Do something if Backup all options button clicked
	}
}
Nach dem Login kopieren

Wir erstellen einfach ein Formular mit einer Schaltfläche und prüfen, ob auf die Schaltfläche geklickt wird. Darüber hinaus fügen wir mithilfe einiger der verfügbaren WordPress-CSS-Klassen beschreibenden Text hinzu. Für Sicherheitsüberprüfungen verwende ich die wp_nonce_field()check_admin_referer()-Funktion, erfahren Sie mehr über WordPress Nonces.

Nennen Sie den zu generierenden Dateinamen

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

Benennen Sie einfach die Datei, damit Sie leicht erkennen können, wo und wann sie exportiert wurde.

Erhalten Sie Sicherungsoptionen und kodieren Sie sie als JSON-Daten

$options = get_alloptions();

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

$json_file = json_encode($need_options);
Nach dem Login kopieren

Dies ist ein wichtiger Schritt, bitte beachten Sie:

  • get_alloptions() 是一个获取站点上所有选项并将其作为数组返回的函数,在本例中为 $options.
  • Durch das Abrufen aller Optionen handelt es sich beim Wert der Option möglicherweise um serialisierte Daten, daher müssen wir sie zuerst deserialisieren.
  • Unser Ziel ist es, JSON zum Speichern von Sicherungsdaten zu generieren. JSON ist eine einfache und leistungsstarke Methode zum Speichern von Textinformationen. Alles, was wir tun müssen, ist, unsere Daten in JSON-Syntax umzuwandeln, json_encode hilft uns, dieses Ziel zu erreichen.
ob_clean();
echo $json_file;
header("Content-Type: text/json; charset=" . get_option( 'blog_charset'));
header("Content-Disposition: attachment; filename=$json_name.json");
exit();
Nach dem Login kopieren

Dann verpacken wir den Inhalt der JSON-Daten in zwei wichtige Funktionen: ob_clean()exit() 以确保生成的 JSON 文件仅包含 json_file 保存的 JSON 数据,而没有任何其他数据。顺便说一下,我们向客户端发送一个标头请求,显示一个下载对话框。为了使其正常工作,我们应该将 ob_start() Die Funktion wird oben im Plugin-Code platziert. Dies verhindert, dass Header-Fehler auftreten. Möglicherweise führen einige zusätzliche Leerzeichen oder Zeilen irgendwo im WordPress-Code dazu Situation.

„JSON (JavaScript Object Notation) ist ein leichtes Datenaustauschformat. Es ist für Menschen leicht zu lesen und zu schreiben. Es ist für Maschinen leicht zu analysieren und zu generieren.“

Dies ist der vollständige Exportfunktionscode:

function ie_export_option_page() {
	if (!isset($_POST['export'])) {
		?>
		<div class="wrap">
			<div id="icon-tools" class="icon32"><br /></div>
			<h2 id="Export">Export</h2>
			<p>When you click <tt>Backup all options</tt> button, system will generate a JSON file for you to save on your computer.</p>
			<p>This backup file contains all configution and setting options on our website. Note that it do <b>NOT</b> contain posts, pages, or any relevant data, just your all options.</p>
			<p>After exporting, you can either use the backup file to restore your settings on this site again or another WordPress site.</p>
			<form method='post'>
				<p class="submit">
					<?php wp_nonce_field('ie-export'); ?>
					<input type='submit' name='export' value='Backup all options'/>
				</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; // Namming the filename will be generated.

		$options = get_alloptions(); // Get all options data, return array

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

		$json_file = json_encode($need_options); // Encode data into json data

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


Schritt 4Erstellen Sie die Importfunktion

Die Aufgabe dieser Seite ist sehr einfach: Sie zeigt das Upload-Formular an und analysiert die Daten in der JSON-Datei, um unsere Optionen zu sichern.

创建导入页面骨架

function ie_import_option_page() {
	?>
	<div class="wrap">
		<div id="icon-tools" class="icon32"><br /></div>
		<h2 id="Import">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
}
Nach dem Login kopieren

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

验证和更新 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>";
		}
	}
}
Nach dem Login kopieren

如果上传过程出错,只需返回一条死消息“发生错误”。如果没有,获取文件的扩展名和大小,将它们存储到变量中并检查它们。我们只接受扩展名为“.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 id="Import">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
}
Nach dem Login kopieren

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

在示例插件中,我使用 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);
Nach dem Login kopieren

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


结论

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

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


偏好:

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

Das obige ist der detaillierte Inhalt vonVereinfachen Sie den Prozess des Sicherns und Wiederherstellens von Einstellungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Apr 05, 2025 am 12:04 AM

JWT ist ein offener Standard, der auf JSON basiert und zur sicheren Übertragung von Informationen zwischen Parteien verwendet wird, hauptsächlich für die Identitätsauthentifizierung und den Informationsaustausch. 1. JWT besteht aus drei Teilen: Header, Nutzlast und Signatur. 2. Das Arbeitsprinzip von JWT enthält drei Schritte: Generierung von JWT, Überprüfung von JWT und Parsingnayload. 3. Bei Verwendung von JWT zur Authentifizierung in PHP kann JWT generiert und überprüft werden, und die Funktionen und Berechtigungsinformationen der Benutzer können in die erweiterte Verwendung aufgenommen werden. 4. Häufige Fehler sind Signaturüberprüfungsfehler, Token -Ablauf und übergroße Nutzlast. Zu Debugging -Fähigkeiten gehört die Verwendung von Debugging -Tools und Protokollierung. 5. Leistungsoptimierung und Best Practices umfassen die Verwendung geeigneter Signaturalgorithmen, das Einstellen von Gültigkeitsperioden angemessen.

Wie setze ich nach dem Neustart des Systems automatisch Berechtigungen von Unixsocket fest? Wie setze ich nach dem Neustart des Systems automatisch Berechtigungen von Unixsocket fest? Mar 31, 2025 pm 11:54 PM

So setzen Sie die Berechtigungen von Unixsocket automatisch nach dem Neustart des Systems. Jedes Mal, wenn das System neu startet, müssen wir den folgenden Befehl ausführen, um die Berechtigungen von Unixsocket: sudo ...

Beschreiben Sie die soliden Prinzipien und wie sie sich für die PHP -Entwicklung anwenden. Beschreiben Sie die soliden Prinzipien und wie sie sich für die PHP -Entwicklung anwenden. Apr 03, 2025 am 12:04 AM

Die Anwendung des soliden Prinzips in der PHP -Entwicklung umfasst: 1. Prinzip der Einzelverantwortung (SRP): Jede Klasse ist nur für eine Funktion verantwortlich. 2. Open and Close Principle (OCP): Änderungen werden eher durch Erweiterung als durch Modifikation erreicht. 3.. Lischs Substitutionsprinzip (LSP): Unterklassen können Basisklassen ersetzen, ohne die Programmgenauigkeit zu beeinträchtigen. 4. Schnittstellen-Isolationsprinzip (ISP): Verwenden Sie feinkörnige Schnittstellen, um Abhängigkeiten und nicht verwendete Methoden zu vermeiden. 5. Abhängigkeitsinversionsprinzip (DIP): Hoch- und niedrige Module beruhen auf der Abstraktion und werden durch Abhängigkeitsinjektion implementiert.

Erklären Sie das Konzept der späten statischen Bindung in PHP. Erklären Sie das Konzept der späten statischen Bindung in PHP. Mar 21, 2025 pm 01:33 PM

In Artikel wird die in PHP 5.3 eingeführte LSB -Bindung (LSB) erörtert, die die Laufzeitauflösung der statischen Methode ermöglicht, um eine flexiblere Vererbung zu erfordern. Die praktischen Anwendungen und potenziellen Perfo von LSB

Wie sende ich eine Postanforderung mit JSON -Daten mithilfe der Curl -Bibliothek von PHP? Wie sende ich eine Postanforderung mit JSON -Daten mithilfe der Curl -Bibliothek von PHP? Apr 01, 2025 pm 03:12 PM

Senden von JSON -Daten mithilfe der Curl -Bibliothek von PHP in der PHP -Entwicklung müssen häufig mit externen APIs interagieren. Eine der gängigen Möglichkeiten besteht darin, die Curl Library zu verwenden, um Post � ...

Rahmensicherheitsmerkmale: Schutz vor Schwachstellen. Rahmensicherheitsmerkmale: Schutz vor Schwachstellen. Mar 28, 2025 pm 05:11 PM

In Artikel werden wichtige Sicherheitsfunktionen in Frameworks erörtert, um vor Schwachstellen zu schützen, einschließlich Eingabevalidierung, Authentifizierung und regelmäßigen Aktualisierungen.

Anpassung/Erweiterung von Frameworks: So fügen Sie benutzerdefinierte Funktionen hinzu. Anpassung/Erweiterung von Frameworks: So fügen Sie benutzerdefinierte Funktionen hinzu. Mar 28, 2025 pm 05:12 PM

In dem Artikel werden Frameworks hinzugefügt, das sich auf das Verständnis der Architektur, das Identifizieren von Erweiterungspunkten und Best Practices für die Integration und Debuggierung hinzufügen.

See all articles