Хранение данных в вордпресс
Задача сохранения данных стоит каждый раз когда нужно что-то программировать, а при разработке плагинов это одна из первых задач после создания интерфейсной части. Но данные в WordPress можно хранить по разному. Я предлагаю два варианта.
- Сохранение данных при помощи функции add_option для опций.
- Добавление данных в новую таблицу базы данных для хранения большого количества данных и тех которые могут постоянно меняться.
Рассмотрим как правильно хранить опции.
Разместим код в папку с плагинами в новый файл с именем add-my-options.php.
1 2 3 4 5 6 7 8 9 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 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
<?php /** * @package Package name * @version 1.0 */ /* Plugin Name: My plugin add-my-options Plugin URI: https://wp-admin.com.ua Description: спасибо сайту wp-admin.com.ua, он научит меня делать плагины ) Armstrong: My Plugin. Author: Name Author Version: 1.0 Author URI: https://wp-admin.com.ua */ add_action('admin_menu', 'create_custom_panel'); function create_custom_panel() { add_menu_page('menu page', 'Add data', 'manage_options', 'custom-panel', 'custom_panel'); } function custom_panel(){ echo '<div class="wrap"> <h2>Сохраняем опции плагина</h2> <form method="post" action="options.php"> '.wp_nonce_field('update-options').' <table class="form-table"> <tr valign="top"> <th scope="row">Опция 1</th> <td><input type="text" name="my_option_first" value="'.get_option('my_option_first').'" /></td> </tr> <tr valign="top"> <th scope="row">Опция 2</th> <td><input type="text" name="my_option_second" value="'.get_option('my_option_second').'" /></td> </tr> <tr valign="top"> <th scope="row">Опция 3</th> <td><input type="text" name="my_option_third" value="'.get_option('my_option_third').'" /></td> </tr> </table> <input type="hidden" name="action" value="update" /> <input type="hidden" name="page_options" value="my_option_first,my_option_second,my_option_third" /> <p class="submit"> <input type="submit" class="button-primary" value="Сохранить" /> </p> </form> </div>'; } ?> |
После размещения кода активируйте плагин в панели администратора и если все сделали правильно у вас появиться пункт Add data в меню администратора слева.
Попорядку рассмотрим код написанного плагина
Функция wp_nonce_field(‘update-options’) добавляет два скрытых поля позволяющих автоматически проверять права пользователя на изменение настроек и перенаправлять его обратно.
Функция get_option() выводит сохраненные данные в поле ввода. Еще один участок кода находящийся в конце формы отвечает за запись опций из полей ввода.
1 2 |
<input type="hidden" name="action" value="update" /> <input type="hidden" name="page_options" value="my_option_first,my_option_second,my_option_third" /> |
«page_options» содержит разделенный запятыми список всех настроек, которые нужно записать при сохранении.
На официальном сайте WordPress нашел еще один пример хранения данных. Мне кажется, он будет более правильным так как есть явное разделение шаблона формы и кода. Код смотрится намного чище. Описывать не буду вроде из кода все понятно, если не понятно пишите в комментариях, постараюсь разъяснить.
1 2 3 4 5 6 7 8 9 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 44 45 46 47 48 49 50 51 52 |
<?php // create custom plugin settings menu add_action('admin_menu', 'baw_create_menu'); function baw_create_menu() { //create new top-level menu add_menu_page('BAW Plugin Settings', 'BAW Settings', 'administrator', __FILE__, 'baw_settings_page',plugins_url('/images/icon.png', __FILE__)); //call register settings function add_action( 'admin_init', 'register_mysettings' ); } function register_mysettings() { //register our settings register_setting( 'baw-settings-group', 'new_option_name' ); register_setting( 'baw-settings-group', 'some_other_option' ); register_setting( 'baw-settings-group', 'option_etc' ); } function baw_settings_page() { ?> <div class="wrap"> <h2>Your Plugin Name</h2> <form method="post" action="options.php"> <?php settings_fields( 'baw-settings-group' ); ?> <table class="form-table"> <tr valign="top"> <th scope="row">New Option Name</th> <td><input type="text" name="new_option_name" value="<?php echo get_option('new_option_name'); ?>" /></td> </tr> <tr valign="top"> <th scope="row">Some Other Option</th> <td><input type="text" name="some_other_option" value="<?php echo get_option('some_other_option'); ?>" /></td> </tr> <tr valign="top"> <th scope="row">Options, Etc.</th> <td><input type="text" name="option_etc" value="<?php echo get_option('option_etc'); ?>" /></td> </tr> </table> <p class="submit"> <input type="submit" class="button-primary" value="<?php _e('Save Changes') ?>" /> </p> </form> </div> <?php } ?> |
Проверить последний пример не успел но первый работает стабильно. О работе с базами данных постараюсь описать в следующих выпусках.
Удачи в разработке плагинов!

/*

- Базовый курс по веб-дизайну;
- Верстка сайтов;
- Общий курс по CMS WordPress и продолжение курса по разработке шаблонов;
- Разработка сайтов на PHP.
Еще одна статья в дополнение о работе с опциями.
http://wp-admin.com.ua/rassmotrim-mehanizmyi-rabotyi-s-optsiyami/