Параметры являются наиболее важными данными в WordPress, они хранят различные параметры конфигурации ( подробнее ). Они также содержатся в базе данных, как и другие важные данные, такие как сообщения, страницы и т. Д. Изо дня в день эти параметры могут быть изменены самим WordPress или пользователями. Так как же настроить их обратно в предыдущее состояние без запоминания каждого точного значения?
В этом уроке я покажу вам, как создать простую функцию резервного копирования / восстановления для вашего блога WordPress. С помощью этой функции вы можете создавать резервные копии всех параметров в другом месте, откуда вы можете восстановить их в любое время, не настраивая их снова.
Прежде чем мы начнем
Как правило, наша функция будет состоять из двух разделов: один — раздел «Экспорт» для резервного копирования данных, а раздел «Импорт» — для восстановления данных. Поэтому я продемонстрирую это, создав простой плагин.
Шаг 1 Заголовок плагина
Прежде всего, я должен написать несколько строк, чтобы рассказать WordPress о нашем плагине.
1
2
3
4
5
6
7
8
|
/*
Plugin Name: I/E Option
Plugin URI: http://wp.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
*/
|
И вот наш результат:
Шаг 2 Создайте страницу администратора
Теперь нам нужно место для размещения нашего интерфейса плагина, он показывает две ключевые функции, которые были упомянуты выше (включая функции импорта и экспорта). Поэтому я создаю страницу в разделе администратора:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
|
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’);
|
Вот несколько моментов:
- Мы используем
add_menu_page
как встроенную функцию WordPress для добавления нового раздела меню верхнего уровня на боковой панели меню администратора, где параметрie_option_page
является функцией обратного вызова для вывода содержимого страницы. - Чтобы разделить две основные функции на разные разделы, мы используем
add_submenu_page
чтобы добавить их в меню верхнего уровня, которое мы только что создали. Как видите, каждая функция также имеет функцию обратного вызова для отображения содержимого вывода, как этоadd_menu_page
функцияadd_menu_page
. Неважно, если вы объедините их в одном месте, я просто стараюсь, чтобы это было ясно. - Затем мы подключаем
register_ie_option
к действиюadmin_menu
, чтобы вызывать нашу цель при каждом вызове этого действия.
Шаг 3 Создать функцию экспорта
Я планирую создать страницу экспорта следующим образом:
Скелет создания страницы экспорта
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
|
function ie_export_option_page() {
if (!isset($_POST[‘export’])) {
?>
<div class=»wrap»>
<div id=»icon-tools» class=»icon32″><br /></div>
<h2>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.
<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
}
}
|
Мы просто создаем форму с кнопкой и проверяем, нажата кнопка или нет. Кроме того, мы добавляем текст инструкции, используя некоторый доступный класс WordPress CSS. Для проверки безопасности я использую функции wp_nonce_field()
и check_admin_referer()
, узнайте больше о WordPress Nonces .
Называя имя файла для генерации
1
2
3
|
$blogname = str_replace(» «, «», get_option(‘blogname’));
$date = date(«mdY»);
$json_name = $blogname.»-«.$date;
|
Просто назовите файл, чтобы вы могли легко увидеть, где и когда он был экспортирован.
Получить параметры резервного копирования и кодировать в данные JSON
1
2
3
4
5
6
7
8
|
$options = get_alloptions();
foreach ($options as $key => $value) {
$value = maybe_unserialize($value);
$need_options[$key] = $value;
}
$json_file = json_encode($need_options);
|
Вот важный шаг, давайте обратим внимание:
-
get_alloptions()
— это функция, которая получает все опции на вашем сайте и возвращает их в виде массива, в этом случае$options
. - Извлекая все параметры, значение параметров может быть сериализованными данными, поэтому мы должны сначала его десериализовать.
- Наше намерение заключается в создании JSON для хранения резервных данных. JSON — это легкий и мощный способ хранения текстовой информации. Поэтому нам нужно преобразовать наши данные в синтаксис JSON,
json_encode
помогает нам достичь этой цели.
1
2
3
4
5
|
ob_clean();
echo $json_file;
header(«Content-Type: text/json; charset=» . get_option( ‘blog_charset’));
header(«Content-Disposition: attachment; filename=$json_name.json»);
exit();
|
Затем мы заключаем содержимое наших данных JSON в две важные функции, ob_clean()
и exit()
чтобы гарантировать, что наш сгенерированный файл JSON содержит только те данные JSON, которые json_file
хранит без каких-либо других данных. Кстати, мы отправляем запрос заголовка клиенту, который отображает диалог загрузки. Чтобы это работало должным образом, мы должны поместить функцию ob_start()
в верхнюю часть кода нашего плагина, это предотвратит возникновение ошибок заголовка, возможно, в коде WordPress есть какие-то дополнительные пробелы или строки, которые могут это вызвать.
« JSON (JavaScript Object Notation) — это легкий формат обмена данными. Людям легко читать и писать. Машины легко анализировать и генерировать».
Итак, вот весь код функции экспорта:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
function ie_export_option_page() {
if (!isset($_POST[‘export’])) {
?>
<div class=»wrap»>
<div id=»icon-tools» class=»icon32″><br /></div>
<h2>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.
<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(«mdY»);
$json_name = $blogname.»-«.$date;
$options = get_alloptions();
foreach ($options as $key => $value) {
$value = maybe_unserialize($value);
$need_options[$key] = $value;
}
$json_file = json_encode($need_options);
ob_clean();
echo $json_file;
header(«Content-Type: text/json; charset=» . get_option( ‘blog_charset’));
header(«Content-Disposition: attachment; filename=$json_name.json»);
exit();
}
}
|
Шаг 4 Создать функцию импорта
Задача этой страницы довольно проста: она отображает форму загрузки и анализирует данные из файла JSON для резервного копирования наших параметров.
Скелет создания страницы импорта
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
|
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
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
|
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
со вторым параметром, который имеет истинное значение, поэтому эта функция возвращает значение массива. Со значением массива мы начинаем цикл по нему. На каждой итерации мы будем обновлять данные тем же ключом и его значением. В конце концов, все наши параметры будут восстановлены в точности так, как они были, и будет отображено успешное сообщение.
А вот и весь код функции импорта:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
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’];
/* 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
копию всех параметров сайта с помощью get_alloptions
WordPress get_alloptions
. Если вы хотите применить это к вашим собственным конкретным параметрам, просто сделайте это так:
1
2
|
$options = array(‘your_option1_name’ => get_option(‘your_option1_name’), ‘your_option2_name’ => get_option(‘your_option2_name’);
$json_file = json_encode($options);
|
И перейдите к следующему шагу, как указано выше. Вы можете свободно выбирать, какие параметры вы хотите сделать резервную копию!
Вывод
В этом уроке мы рассмотрим обзор создания простой функции резервного копирования / восстановления. Вы должны заметить, что мой плагин — это простой пример, а не официальный. Моя цель не написать идеальный плагин, а показать вам основной принцип этой функции. Поняв это, вы можете создавать свои собственные функции в своих шаблонах или плагинах, вы также можете сделать их настолько гибкими, насколько захотите. Поэтому вы можете сделать эту функцию изолированной для ваших шаблонов / плагинов.
Я надеюсь, что этот урок полезен для вас, дайте мне знать, что вы думаете. Ваши идеи делают это лучше, или даже показывают мне мои ошибки, ваши отзывы очень помогут. Спасибо за прочтение!