В предыдущей серии мы создали плагин для WordPress с минимальным функционалом. Продолжаем двигаться дальше.
Задача на сегодня – добавить в плагин настройку. Напомню, что наш плагин сейчас умеет добавлять к контенту записи фразу: «Всего хорошего, и спасибо за рыбу!». Сделаем так, чтобы эту фразу можно было менять на произвольную в настройках плагина.
Первое, что сделаем – это добавим в меню администрирования пункт с настройками. Для этого используем обработку события admin_menu:
1 | add_action('admin_menu','admin_test_plugin'); |
add_action('admin_menu','admin_test_plugin');
и функцию обработки события admin_test_plugin
1 2 3 4 5 6 7 8 | function admin_test_plugin() { $page_title = 'Test plugin 1'; $menu_title = 'Тестовый плагин'; $capability = 'manage_options'; $menu_slug = 'test_plugin_1'; $admin_function = 'add_options_test_page'; add_options_page($page_title, $menu_title, $capability, $menu_slug, $admin_function); } |
function admin_test_plugin() { $page_title = 'Test plugin 1'; $menu_title = 'Тестовый плагин'; $capability = 'manage_options'; $menu_slug = 'test_plugin_1'; $admin_function = 'add_options_test_page'; add_options_page($page_title, $menu_title, $capability, $menu_slug, $admin_function); }
Строка
1 | add_options_page($page_title, $menu_title, $capability, $menu_slug, $admin_function); |
add_options_page($page_title, $menu_title, $capability, $menu_slug, $admin_function);
добавляет в настройки отдельную страницу для нашего плагина. Проиллюстрирую это:
Если с page_title и menu_title всё понятно, то про другие аргументы стоит разъяснить более подробно.
- capability — это уровень доступа. Для редактирования настроек он должен быть manage_options
- menu_slug — уникальное имя для страницы настроек плагина
- admin_function — функция, которая будет формировать страницу настроек
А вот и сама функция из последнего пункта:
1 2 3 4 5 | function add_options_test_page() { echo '<h2>Настройки плагина Test plugin 1</h2>'; add_option('message_text','Всего хорошего, и спасибо за рыбу!'); change_test_plugin_setup(); } |
function add_options_test_page() { echo '<h2>Настройки плагина Test plugin 1</h2>'; add_option('message_text','Всего хорошего, и спасибо за рыбу!'); change_test_plugin_setup(); }
С помощью функции add_option мы добавили настройку message_text и присвоили начальное значение ‘Всего хорошего, и спасибо за рыбу!’. Если опция message_text уже добавлялась ранее, то функция add_option просто не сработает, а для обновления значения нужна другая функция — update_option.
Функция change_test_plugin_setup() уже непосредственно сохраняет и читает настройки. Её текст, вынесен отдельно только для наглядности:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | function change_test_plugin_setup() { if (isset($_POST['test_plugin_base_setup_btn'])) { update_option('message_text', $_POST['message_text']); } else { echo "<form name='test_plugin_base_setup' method='post' action='".$_SERVER['PHP_SELF']."?page=test_plugin_1&updated=true'>"; echo " <table> <tr> <td>Фраза для добавления: </td> <td><input type='text' name='message_text' value='".get_option(message_text)."' style='width:500px'/></td> </tr> <tr> <td> </td> <td><input type='submit' name='test_plugin_base_setup_btn' value='Сохранить'/></td> </tr> </table> "; echo "</form>"; } } |
function change_test_plugin_setup() { if (isset($_POST['test_plugin_base_setup_btn'])) { update_option('message_text', $_POST['message_text']); } else { echo "<form name='test_plugin_base_setup' method='post' action='".$_SERVER['PHP_SELF']."?page=test_plugin_1&updated=true'>"; echo " <table> <tr> <td>Фраза для добавления: </td> <td><input type='text' name='message_text' value='".get_option(message_text)."' style='width:500px'/></td> </tr> <tr> <td> </td> <td><input type='submit' name='test_plugin_base_setup_btn' value='Сохранить'/></td> </tr> </table> "; echo "</form>"; } }
Теперь изменим код функции send_message:
1 2 3 4 5 | function send_message($content) { $content = $content.'<h1>'.get_option('message_text').'</h1>'; return $content; } |
function send_message($content) { $content = $content.'<h1>'.get_option('message_text').'</h1>'; return $content; }
Код плагина целиком:
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 /* Plugin Name: Test plugin 1 */ function send_message($content) { $content = $content.'<h1>'.get_option('message_text').'</h1>'; return $content; } function add_options_test_page() { echo '<h2>Настройки плагина Test plugin 1</h2>'; add_option('message_text','Всего хорошего, и спасибо за рыбу!'); change_test_plugin_setup(); } function change_test_plugin_setup() { if (isset($_POST['test_plugin_base_setup_btn'])) { update_option('message_text', $_POST['message_text']); } else { echo "<form name='test_plugin_base_setup' method='post' action='".$_SERVER['PHP_SELF']."?page=test_plugin_1&updated=true'>"; echo " <table> <tr> <td>Фраза для добавления: </td> <td><input type='text' name='message_text' value='".get_option(message_text)."' style='width:500px'/></td> </tr> <tr> <td> </td> <td><input type='submit' name='test_plugin_base_setup_btn' value='Сохранить'/></td> </tr> </table> "; echo "</form>"; } } function admin_test_plugin() { $page_title = 'Test plugin 1'; $menu_title = 'Тестовый плагин'; $capability = 'manage_options'; $menu_slug = 'test_plugin_1'; $admin_function = 'add_options_test_page'; add_options_page($page_title, $menu_title, $capability, $menu_slug, $admin_function); } add_action('admin_menu','admin_test_plugin'); add_action('the_content', 'send_message'); ?> |
<?php /* Plugin Name: Test plugin 1 */ function send_message($content) { $content = $content.'<h1>'.get_option('message_text').'</h1>'; return $content; } function add_options_test_page() { echo '<h2>Настройки плагина Test plugin 1</h2>'; add_option('message_text','Всего хорошего, и спасибо за рыбу!'); change_test_plugin_setup(); } function change_test_plugin_setup() { if (isset($_POST['test_plugin_base_setup_btn'])) { update_option('message_text', $_POST['message_text']); } else { echo "<form name='test_plugin_base_setup' method='post' action='".$_SERVER['PHP_SELF']."?page=test_plugin_1&updated=true'>"; echo " <table> <tr> <td>Фраза для добавления: </td> <td><input type='text' name='message_text' value='".get_option(message_text)."' style='width:500px'/></td> </tr> <tr> <td> </td> <td><input type='submit' name='test_plugin_base_setup_btn' value='Сохранить'/></td> </tr> </table> "; echo "</form>"; } } function admin_test_plugin() { $page_title = 'Test plugin 1'; $menu_title = 'Тестовый плагин'; $capability = 'manage_options'; $menu_slug = 'test_plugin_1'; $admin_function = 'add_options_test_page'; add_options_page($page_title, $menu_title, $capability, $menu_slug, $admin_function); } add_action('admin_menu','admin_test_plugin'); add_action('the_content', 'send_message'); ?>
Я тут недавно писал про мотороловские терминалы сбора данных MC9090. Хочу порекомендовать один сайт, который продаёт ТСД motorola mc3190 — motorola-ua.com.