- Все для CMS | Joomla, Drupal, phpBB, Wordpress, DLE, IPB - http://cmsart.ru -
WordPress: создание плагина, как правильно хранить настройки в базе данных?
Posted By Archi On 31.05.2012 @ 5:31 пп In Статьи Wordpress | No Comments
Замечали ли вы, что не все
И так, пример кода для сохранения настроек плагина в базе данных, используя функции update_option и delete_option.
Конечно можно и с помощью add_option, но в Кодексе критики по поводу этого я не нашел.
Опции будут запоминаться в таблице <префикс, заданный при установке>_options.
<?php
/* * Опции плагина, для удобства используем массив. * Здесь задаём список полей формы */ $plugname = "My plugin for WordPress"; // Имя плагина, для отображения в админке $shortname = "mypre"; // Префикс для опции в таблице wp_options $plugoptions = array ( array( "name" => "Группа настроек №1", "type" => "title"), array( "name" => "Опция №1", "desc" => "Описание опции 1.1", "id" => $shortname."_opt11", // В таблице БД будет поле, - mypre_opt11 "std" => "", // Значение по умолчанию для текстовых полей "type" => "checkbox"), // Пусть будет "чекбоксом" ... array( "name" => "Опция №2", "desc" => "Описание опции 1.2", "id" => $shortname."_opt12", "std" => "", "type" => "text"), // Пусть будет однострочным текстовым полем array( "name" => "Группа настроек №2", "type" => "title"), array( "name" => "Опция 2.1", "desc" => "Описание опции 2.1", "id" => $shortname."_opt22", "std" => "", "type" => "checkbox"), ); ?>
Примерный вид формы с настройками:
<?php function my_plug_form_for_admin() { global $plugname, $shortname, $plugoptions; ?> <div> <form method="post"> <!-- Данные из формы получаем методом post --> <table> <?php foreach ($plugoptions as $value) { //Считываем список опций из массива /* Заголовок */ if ($value['type'] == "title") { ?> //Это для вывода заголовков "групп настроек", <tr valign="top"> //никаких данных из БД здесь не получаем <td colspan="2"> <h3 ><?php echo $value['name']; ?></h3> </td> </tr> <!-- Флажок --> <?php } elseif ($value['type'] == "checkbox") { ?> <tr valign="top"> <th scope="row"><?php echo $value['name']; ?>:</th> <td><? if( get_option($value['id']) ) { //используя WP-функцию get_option, $checked = "checked=\"checked\""; //считываем состояние флажка из БД } else { $checked = ""; } ?> <input type="checkbox" name="<?php echo $value['id']; ?>" id="<?php echo $value['id']; ?>" value="true" <?php echo $checked; ?> /> <br /> <?php echo $value['desc'] ; ?> //выводим описание опции, не из базы </td> </tr> <!-- Текстовое поле ввода --> <?php } elseif ($value['type'] == "text") { ?> <tr valign="top"> <th scope="row"><?php echo $value['name']; ?>:</th> <td><input name="<?php echo $value['id']; ?>" id="<?php echo $value['id']; ?>" type="<?php echo $value['type']; ?>" value="<?php if (get_option( $value['id'] ) != "") { echo htmlspecialchars( get_option( $value['id'] ) ); } else { echo $value['std']; } ?>" /> <br /> <?php echo $value['desc'] ; ?> </td> </tr> <?php } } ?> <!-- Конец цикла считывания данных --> </table> <div> <!-- Кнопки действий --> <input name="save" type="submit" value="Сохранить" /> <input name="reset" type="submit" value="Сбросить" /> </div> </form> </div> <?php } // Конец функции ?>
«Обработчик» данных или «Что будем делать с полученной информацией от формы?»:
function my_plug_handler() { global $plugname, $shortname, $plugoptions; if ( isset($_POST['save']) ) { foreach ($plugoptions as $value) { // Запомним настройки в таблицу wp_options update_option( $value['id'], $_REQUEST[ $value['id'] ] ); } echo '<div id="message"><p><strong>' . 'Настройки "'.$plugname.'" успешно сохранены.' . '</strong></p></div>'; } else if ( isset($_POST['reset']) ) { // При сбросе: удаляем записи опций из БД foreach ($plugoptions as $value) { delete_option( $value['id'] ); } echo '<div id="message"><p><strong>' . 'Настройки "'.$plugname.'" успешно сброшены.' . '</strong></p></div>'; } /* Добавим в меню "Параметры" */ add_options_page($plugname.": настройки", // Заголовок страницы с опциями плагина "Код перед/за постом", // Название нового пункта меню 'edit_plugins', // Права доступа ("полномочия") пользователя basename(__FILE__), // Уникальное имя файла 'my_plug_form_for_admin'); // Функция с кодом формы для админки, см. выше }
Зарегистрировать новое действие в админке WordPress можно с помощью:
<?php add_action('admin_menu', 'my_plug_handler'); ?>
Описываемый способ ориентирован прежде всего для применения в «лёгковесных» плагинах. А вот при написании «тяжеловесов» целесообразней выбрать другой подход. Например, создавая отдельные таблицы, как это сделано в WP-Polls (система опросов для WordPress).
Посмотреть всё вышесказанное в действии вы можете, скачав этот
Источник: sooource.net [3]
Article printed from Все для CMS | Joomla, Drupal, phpBB, Wordpress, DLE, IPB: http://cmsart.ru
URL to article: http://cmsart.ru/wordpress/wordpress-articles/wordpress-sozdanie-plagina-kak-pravilno-hra
URLs in this post:
[1] плагины для WordPress: http://cmsart.ru/goto/http://www.sooource.net/wordpress/twpplugin
[2] плагин: http://cmsart.ru/goto/http://www.sooource.net/accip
[3] sooource.net: http://cmsart.ru/?goto=http%3A%2F%2Fwww.sooource.net
Click here to print.
Copyright © 2012 Поддержка CMS | Документация, статьи по Joomla, Drupal, phpBB. All rights reserved.