Задавайте вопросы по курсам WordPress

Хранение данных в вордпресс

Задача сохранения данных стоит каждый раз когда нужно что-то программировать, а при разработке плагинов это одна из первых задач после создания интерфейсной части. Но данные в WordPress можно хранить по разному. Я предлагаю два варианта.

  1. Сохранение данных при помощи функции add_option для опций.
  2. Добавление данных в новую таблицу базы данных для хранения большого количества данных и тех которые могут постоянно меняться.

Рассмотрим как правильно хранить опции.

Разместим код в папку с плагинами в новый файл с именем add-my-options.php.

<?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() выводит сохраненные данные в поле ввода. Еще один участок кода находящийся в конце формы отвечает за запись опций из полей ввода.

<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 нашел еще один пример хранения данных. Мне кажется, он будет более правильным  так как есть явное разделение шаблона формы и кода. Код смотрится намного чище. Описывать не буду вроде из кода все понятно, если не понятно пишите в комментариях, постараюсь разъяснить.

<?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 } ?>

Проверить последний пример не успел но первый работает стабильно. О работе с базами данных постараюсь описать в следующих выпусках.

Удачи в разработке плагинов!


Купить хостинг WordPress
/* Репетитор по wordpress
Услуги репетитора онлайн. Список курсов которые я веду
  • Базовый курс по веб-дизайну;
  • Верстка сайтов;
  • Общий курс по CMS WordPress и продолжение курса по разработке шаблонов;
  • Разработка сайтов на PHP.
Подробнее читайте на странице репетитор по WordPress
*/
Задавайте вопросы по курсам WordPress

Зберігання даних у вордпрес

Завдання збереження даних варто кожного разу, коли потрібно щось програмувати, а при розробці плагінів це одне з перших завдань після створення інтерфейсної частини. Але дані в WordPress можна зберігати по-різному. Я пропоную два варіанти.

  1. Збереження даних за допомогою функції add_option для опцій.
  2. Додавання даних до нової таблиці бази даних для зберігання великої кількості даних і тих, які можуть постійно змінюватися.

Розглянемо як правильно зберігати опції.

Розмістимо код у папку з плагінами у новий файл з ім’ям add-my-options.php.

<?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() виводить збережені дані у поле введення. Ще одна ділянка коду, що знаходиться в кінці форми, відповідає за запис опцій з полів введення.

<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 виявив ще один приклад зберігання даних. Мені здається, він буде більш правильним так як є явний поділ шаблону форми та коду. Код виглядає набагато чистішим. Описувати не начебто з коду все зрозуміло, якщо не зрозуміло пишіть у коментарях, постараюся роз’яснити.

<?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 } ?>

Перевірити останній приклад не встиг, але перший працює стабільно. Про роботу з базами даних намагатимуся описати у наступних випусках.

Успіхів у розробці плагінів!


Купить хостинг WordPress
Репетитор по wordpress
Услуги репетитора онлайн. Список курсов которые я веду
  • Базовый курс по веб-дизайну;
  • Верстка сайтов;
  • Общий курс по CMS WordPress и продолжение курса по разработке шаблонов;
  • Разработка сайтов на PHP.
Подробнее читайте на странице репетитор по WordPress
*/

Николаенко Максим

Директор веб-студии ProGrafika. Занимаюсь разработкой, дизайном и продвижением веб-сайтов. Всегда рад новым читателям блога и хорошим клиентам.


Вам может также понравиться...

1 комментарий

  1. Еще одна статья в дополнение о работе с опциями.
    http://wp-admin.com.ua/rassmotrim-mehanizmyi-rabotyi-s-optsiyami/

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Шаблоны для WordPress
Самый лучший хостинг в Украине
Стабильный хостинг для Drupal