Пишем плагин для WordPress. Создание страницы настроек плагина (часть 4)
Создаём страницу настроек для WordPress плагина
Продолжим разговор о том, как написать свой плагин для WordPress.
В прошлый раз мы рассмотрели вопрос предустановленные настройки wordpress плагина, а сегодня попробуем написать его административную страницу. Для начала приведу функцию создания этой страницы, а затем на некоторых моментах остановлюсь подробней. В принципе основные сведения были даны в предыдущей части руководства, здесь же достаточно просто кода с комментариями.
Функция создания страницы настроек для плагина 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 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | function myplugin_options_page() { //Функция создания и обработки страницы настроек плагина global $wpdb, $myplugin_prefs_table; $myplugin_options = array( //Создаём массив с настройками плагина 'myplug_modify_title', 'myplug_modify_content', ); $cmd = $_POST['cmd']; //Обработка пользовательского ввода foreach ($myplugin_options as $myplugin_opt) { $$myplugin_opt = get_option($myplugin_opt); } if ($cmd == "del_prefs") { //Если нажато "удалить фразы" - очищаем таблицу настроек плагина $sql = "TRUNCATE TABLE $myplugin_prefs_table"; $wpdb->query( $sql ); ?> <div class="updated"><p><strong> <?php echo __('All phrases are removed from the database','example_plugin'); ?></strong></p></div> /* Сообщаем пользвателю об успешной очистке. */ <?php } if ($cmd == "add_prefs" && $_POST['prefs_base']) { //Если введены новые фразы в соотв. поле - обработаем их $lines = explode("\n", $_POST['prefs_base']); //Ввод разбивается на строки и кладётся в массив, разделитель - перевод строки foreach($lines as $line){ //Перебираем массив со строками $line = trim($line); //Обрезка каждой строки от переводов if (!$line) continue; //Если строка отстутствует - переходим к следующей итерации list($title, $body) = explode("|", $line); //Разделение строки на две подстроки //Кладём подстроки в таблицу плагина. $sql = "INSERT INTO $myplugin_prefs_table (title, body) VALUES('$title','$body')"; $wpdb->query($sql); } ?> <div class="updated"><p><strong> <?php echo __('Phrases added to the database','example_plugin'); ?></strong></p></div> /*Сообщаем пользователю об успешной обработке*/ <?php } if ($cmd == "myplugin_save_opt") { //Обработка нажатия "Сохранить настройки" foreach ($myplugin_options as $myplugin_opt) { //Перебор массива с настройками $$myplugin_opt = $_POST[$myplugin_opt]; //Каждому элементу массива присваиваем введённое пользователем занчение } foreach ($myplugin_options as $myplugin_opt) { //Обновляем настройки плагина в таблице настроек wordpress update_option($myplugin_opt, $$myplugin_opt); } ?> <div class="updated"><p><strong> <?php echo __('Settings saved','example_plugin'); ?></strong></p></div> <?php } ?> <div class="wrap"> <h2>My Plugin</h2> /*Заголовок страницы настроек плагина*/ <h3><?php echo __('Settings','example_plugin'); ?></h3> /*Название раздела настроек*/ /*Начало формы для обработки настроек. Форма содержит 2 чекбокса, включающих или отключающих соответствующие функции плагина*/ <form method="post" action="<? echo $_SERVER['REQUEST_URI'];?>"> <table class="form-table"> <tr> <th colspan=2 scope="row"> /*Первый чекбокс - будет ли плагин обрабатывать заголовки записей*/ <input name="myplug_modify_title" type="checkbox" <?if($myplug_modify_title)echo "checked";?>> <?php echo __('Add random phrase to post title','example_plugin'); ?> </th> </tr> <tr> <th colspan=2 scope="row"> /*Второй чекбокс - будет ли плагин обрабатывать тело записей*/ <input name="myplug_modify_content" type="checkbox" <?if($myplug_modify_content)echo "checked";?>> <?php echo __('Add random phrase to post content','example_plugin'); ?> </th> </tr> </table> <input type="hidden" name="cmd" value="myplugin_save_opt"> /*"Функциональная" часть кнопки сохранения настроек*/ <p class="submit"> <input type="submit" name="Submit" value="<?php _e('Save Changes') ?>" /> /*Вывод кнопки сохранения настроек в браузер. Стандартная функция Wordpress*/ </p> </form> /*Конец формы обработки настроек*/ /*Вывод информации о плагине. Например - кем разработан*/ <h3><?php echo __('Plugin developed','example_plugin'); ?></h3> <table class="form-table"> <tr><th> <ul> <li><?php echo __('By: <a href="http://dimio.org/" target="_blank">dimio</a>','example_plugin'); ?></li> </ul> </th></tr></table> /*Блок ввода новых фраз в таблицу настроек плагина. Сначала идёт справка для пользователя*/ <h3><?php echo __('Adding phrases','example_plugin'); ?></h3> /*Начало формы ввода. Форма содержит текстовое поле для ввода шириной 80 символов и высотой 12 строк*/ <table class="form-table" width="300px"> <tr> <td> <?php echo __('Format phrases: Title|Body','example_plugin'); ?><br /> <form method="post" action="<? echo $_SERVER['REQUEST_URI'];?>"> <textarea cols=80 rows=12 name="prefs_base"></textarea> /*Поле для ввода новых фраз*/ </td> </tr> </table> /*Кнопка для сохранения фраз. По аналогии с кнопкой сохранения настроек, но без применения стандартной ф-и Wordpress*/ <input type="hidden" name="cmd" value="add_prefs"> <p class="submit"> <input type="submit" name="Submit" value="<?php echo __('Add phrases','example_plugin'); ?>" /> </p> </form> /*Форма, содержащая единственную кнопку - очистки таблицы настроек плагина*/ <form method="post" action="<? echo $_SERVER['REQUEST_URI'];?>"> <input type="hidden" name="cmd" value="del_prefs"> <input type="submit" name="Submit" value="<?php echo __('Remove all phrases from the database','example_plugin'); ?>" /> </form> </div> <?php //Конец функции создания и обработки страницы настроек. } ?> |
Я постарался прокомментировать в коде все ключевые моменты, для глубокого понимания в любом случае стоит читать про html и CGI-программирование в целом. Хотя в принципе — здесь всё интуитивно понятно, а если будет необходимость добавить новые элементы на страницу настроек — обращайтесь, как минимум — подскажу, в какую сторону копать.
В следующем выпуске я перейду к рассмотрению функциональной части плагина для WordPress. Расскажу, как написать для плагина функции, получающие данные из базы и модифицирующие wordpress-публикации.
Затем займёмся русификацией плагина (внимательные должны были обратить внимание на вызовы вида <?php echo __('Add phrases','example_plugin'); ?>
— это как раз задел для будущего грамотного перевода (фактически — интернационализации) плагина).
А в заключение — расскажу, как отправить свой плагин для проверки и последующей публикации в репозитории WordPress на wordpress.org.
Не пропустите! :)
P.S. По-прежнему доступен для скачивания файл плагина, уже обновлённый.
Другие заметки по созданию плагина для WordPress
<-- Часть 3. Подготовка к созданию страницы настроек плагина |
Часть 5. Функциональная составляющая плагина WordPress —> |
Общее оглавление к циклу заметок по созданию плагина для WordPress |



Вообще клёвое описание. Но впредь рекомендую использовать либо «case» — либо конструкцию «if…ifelse…else»
Почему? Ну чисто для восприятия.
Понятно что у тебя обработка переменной $cmd идёт — но знаешь, более понятно будет если эти все обработки будут единым целым, а не отдельными условиями. Кстати тут ещё есть один момент: производительность
Потому как в твоём случае код барыбыр (всё равно) будет проверять все условия. Но применив предложенную конструкцию код, достигнув нужного результата, просто прекратит дальнейший поиск соответствия. А это сокращение процессорного времени. Ещё один плюс. Это читабельность. Когда ты смотришь конструкцию case или «if…ifelse…else» ты понимаешь что это единая обработка, и тут либо либо. И можешь банально забить на этот блок до нужного момента :)
Извини за несколько невнятный текст : говорить никогда нормально не умел.
Мысль ясна в принципе. Переписать в виде if {} elsif {} будет разумно.
Чтобы добиться сокращения процессорного времени, нужно варианты перебора выстроить в наиболее вероятной последовательности, а не так, как они сейчас стоят.
В том числе.
Ну ты реально жжош! Столько кода, да ещё и без нормальных объяснений!!! :-) Пока 3+ это максимум :-) Совет: пиши так, чтобы ЛЮДЯМ было понятно и интересно, а не только тебе, дорогой аффтар!
Зря. Я согласен что не самый оптимальный код — но комментарии предельно понятные.
Ну не то, чтобы код плохой, нет! Просто как-то в него слишком резко въехали, что называется, без предварительных ласк :-) . Нужно было в предыдущих постах как-то расшарить эту информацию, чтобы даже чайнику (коим я уже не являюсь) было всё понятно. А вот у меня вопросы и вопросы…
Конечно, только автор в самом начале оговорился о том, что он изучил php именно на из-за желания написать плагин. I.M.H.O. для малоопытного программиста — статья ничего.
Сделал все по примерам, до создания страницы. Решил проверить. При активации плагина появляется сообщение: «Плагин произвёл при активации 292 символов неожиданного вывода. …»
Notepad++, UTF-8 без BOM
WP 3.1.1
3.1.1 у меня нет. Последнее, на чём проверял — 2.9.2.
В процессе написания этих заметок я делал плагин, который у меня сейчас работает на версии 3.1. ([ссылка]). Можете с ним сравнить, будет ошибка или нет.
Все проще. CR LF после ?>
Внимательнее надо быть