Пишемо плагін для WordPress. Створення сторінки налаштувань плагина (частина 4)
Зміст до курсу створення плагіна для WordPress
- Введення, загальна інформація (Напишемо плагін для WordPress. Часть1.)
- Загальна теорія (Напишемо плагін для WordPress. Частина 2.)
- Підготовка до створення сторінки налаштувань (Напишемо плагін для WordPress. Частина 3.)
- Створення сторінки налаштувань плагина (Напишемо плагін для WordPress. Частина 4.)
- Функціональна складова (Напишемо плагін для WordPress. Частина 5.)
- Інтернаціоналізація і русифікація (Напишемо плагін для WordPress. Частина 6.)
- Додавання в репозиторій WordPress.org (Напишемо плагін для WordPress. Частина 7.)
- Файл з вихідним кодом плагина для WordPress
Створюємо сторінку налаштувань для 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); ?> __ ( 'All phrases are removed from the database' , 'example_plugin' ) ; ?> </strong></p></div> /* Сообщаем пользвателю об успешной очистке. <div class="updated"> <p> <strong> <? php echo __ ('All phrases are removed from the database', 'example_plugin');?> </ strong> </ p> </ div> / * Повідомляємо пользвателю про успішну очищенню. * / <? Php } $cmd == "add_prefs" && $_POST [ 'prefs_base' ] ) { //Если введены новые фразы в соотв. if ($ cmd == "add_prefs" & & $ _POST ['prefs_base']) {/ / Якщо введені нові фрази в соотв. полі - опрацюємо їх explode ( " \n " , $_POST [ 'prefs_base' ] ) ; //Ввод разбивается на строки и кладётся в массив, разделитель - перевод строки $ Lines = explode ("\ n", $ _POST ['prefs_base']); / / Введення розбивається на рядки і кладеться в масив, роздільник - переклад рядка $lines as $line ) { //Перебираем массив со строками foreach ($ lines as $ line) {/ / Перебираємо масив з рядками trim ( $line ) ; //Обрезка каждой строки от переводов $ Line = trim ($ line); / / Обрізка кожного рядка від перекладів ! $line ) continue ; //Если строка отстутствует - переходим к следующей итерации if (! $ line) continue; / / Якщо рядок відсутнє - переходимо до наступної ітерації $title , $body ) = explode ( "|" , $line ) ; //Разделение строки на две подстроки list ($ title, $ body) = explode ("|", $ line); / / Поділ рядка на два підрядки / / Кладемо підрядка в таблицю плагіна. "INSERT INTO $myplugin_prefs_table (title, body) VALUES(' $title ',' $body ')" ; $ Sql = "INSERT INTO $ myplugin_prefs_table (title, body) VALUES ('$ title', '$ body')"; query ( $sql ) ; $ Wpdb -> query ($ sql); } ?> __ ( 'Phrases added to the database' , 'example_plugin' ) ; ?> </strong></p></div> /*Сообщаем пользователю об успешной обработке*/ <div class="updated"> <p> <strong> <? php echo __ ('Phrases added to the database', 'example_plugin');?> </ strong> </ p> </ div> / * Повідомляємо користувачеві про успішну обробці * / <? Php } $cmd == "myplugin_save_opt" ) { //Обработка нажатия "Сохранить настройки" if ($ cmd == "myplugin_save_opt") {/ / Обробка натискання "Зберегти налаштування" $myplugin_options as $myplugin_opt ) { //Перебор массива с настройками foreach ($ myplugin_options as $ myplugin_opt) {/ / Перебір масиву з настройками $_POST [ $myplugin_opt ] ; //Каждому элементу массива присваиваем введённое пользователем занчение $ $ Myplugin_opt = $ _POST [$ myplugin_opt]; / / Кожному елементу масиву присвоюємо введене користувачем занчение } $myplugin_options as $myplugin_opt ) { //Обновляем настройки плагина в таблице настроек wordpress foreach ($ myplugin_options as $ myplugin_opt) {/ / Оновлюємо налаштування плагіна в таблиці налаштувань wordpress , $$myplugin_opt ) ; update_option ($ myplugin_opt, $ $ myplugin_opt); } ?> __ ( 'Settings saved' , 'example_plugin' ) ; ?> </strong></p></div> <div class="updated"> <p> <strong> <? php echo __ ('Settings saved', 'example_plugin');?> </ strong> </ p> </ div> <? Php } ?> <div class="wrap"> <h2> My Plugin </ h2> / * Заголовок сторінки налаштувань плагіна * / __ ( 'Settings' , 'example_plugin' ) ; ?> </h3> /*Название раздела настроек*/ <h3> <? php echo __ ('Settings', 'example_plugin');?> </ h3> / * Назва розділу налаштувань * / / * Початок форми для обробки налаштувань. Форма містить 2 чекбокса, що включають або відключають відповідні функції плагіна * / $_SERVER [ 'REQUEST_URI' ] ; ?> "> <Form method = "post" action = "<? Echo $ _SERVER ['REQUEST_URI'];?>"> <table class="form-table"> <tr> <th colspan=2 scope="row"> / * Перший чекбокс - чи буде плагін обробляти заголовки записів * / ( $myplug_modify_title ) echo "checked" ; ?> > <?php echo __ ( 'Add random phrase to post title' , 'example_plugin' ) ; ?> <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"> / * Другий чекбокс - чи буде плагін обробляти тіло записів * / ( $myplug_modify_content ) echo "checked" ; ?> > <?php echo __ ( 'Add random phrase to post content' , 'example_plugin' ) ; ?> <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"> 'Save Changes' ) ?> " /> /*Вывод кнопки сохранения настроек в браузер. <Input type = "submit" name = "Submit" value = "<? Php _e ('Save Changes')?>" /> / * Висновок кнопки збереження налаштувань в браузер. Стандартна функція Wordpress * / </ P> </ Form> / * Кінець форми обробки налаштувань * / / * Вивід інформації про плагін. Наприклад - ким розроблений * / __ ( 'Plugin developed' , 'example_plugin' ) ; ?> </h3> <h3> <? php echo __ ('Plugin developed', 'example_plugin');?> </ h3> <table class="form-table"> <tr> <th> <ul> __ ( 'By: <a href="http://www.dimio.org/" target="_blank">dimio</a>' , 'example_plugin' ) ; ?> </li> <li> <? php echo __ ('By: <a href="http://www.dimio.org/" target="_blank"> dimio </ a>', 'example_plugin');?> </ li> </ Ul> </ Th> </ tr> </ table> / * Блок введення нових фраз в таблицю налаштувань плагіна. Спочатку йде довідка для користувача * / __ ( 'Adding phrases' , 'example_plugin' ) ; ?> </h3> <h3> <? php echo __ ('Adding phrases', 'example_plugin');?> </ h3> / * Початок форми введення. Форма містить текстове поле для введення шириною 80 символів і висотою 12 рядків * / <table class="form-table" width="300px"> <tr> <td> __ ( 'Format phrases: Title|Body' , 'example_plugin' ) ; ?> <br /> <? Php echo __ ('Format phrases: Title | Body', 'example_plugin');?> <br /> $_SERVER [ 'REQUEST_URI' ] ; ?> "> <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"> __ ( 'Add phrases' , 'example_plugin' ) ; ?> " /> <Input type = "submit" name = "Submit" value = "<? Php echo __ ('Add phrases', 'example_plugin');?>" /> </ P> </ Form> / * Форма, яка містить єдину кнопку - очищення таблиці налаштувань плагіна * / $_SERVER [ 'REQUEST_URI' ] ; ?> "> <Form method = "post" action = "<? Echo $ _SERVER ['REQUEST_URI'];?>"> <input type="hidden" name="cmd" value="del_prefs"> __ ( 'Remove all phrases from the database' , 'example_plugin' ) ; ?> " /> <Input type = "submit" name = "Submit" value = "<? Php echo __ ('Remove all phrases from the database', 'example_plugin');?>" /> </ Form> </ Div> <? Php / / Кінець функції створення та обробки сторінки налаштувань. } ?> |
Я постарався прокоментувати в коді всі ключові моменти, для глибокого розуміння в будь-якому випадку варто читати про html і CGI-програмування в цілому. Хоча в принципі - тут все інтуїтивно зрозуміло, а якщо буде необхідність додати нові елементи на сторінку налаштувань - звертайтесь, як мінімум - підкажу, в який бік копати.
У наступному випуску я перейду до розгляду функціональної частини плагіна для WordPress. Розповім, як написати для плагіна функції, які отримують дані з бази і модифікуючі wordpress-публікації.
'Add phrases' , 'example_plugin' ) ; ?> – это как раз задел для будущего грамотного перевода (фактически – интернационализации) плагина). Потім займемося русифікацією плагіна (уважні повинні були звернути увагу на виклики виду <?php echo __ ( 'Add phrases' , 'example_plugin' ) ; ?> - це якраз заділ для майбутнього грамотного перекладу (фактично - інтернаціоналізації) плагіна).
А на закінчення - розповім, як надіслати свій плагін для перевірки і подальшої публікації в репозиторії WordPress на wordpress.org.
Не пропустіть! ![]()
PS Як і раніше доступний для скачування файл плагіна, вже оновлений.
Ще на схожі теми:
Рубрики: seo , Блогінг , Кодинг |
Мітки: how to- , plugin , wordpress , блог , програмінг , просування |
11 коментарів 

Взагалі клевое опис. Але надалі рекомендую використовувати або "case" - або конструкцію "if ... ifelse ... else"
Чому? Ну чисто для сприйняття.
Зрозуміло що в тебе обробка змінної $ cmd йде - але знаєш, зрозуміліше буде якщо ці всі обробки будуть єдиним цілим, а не окремими умовами. До речі тут ще є один момент: продуктивність
Тому як у твоєму випадку код барибир (все одно) перевірятиме всі умови. Але застосувавши запропоновану конструкцію код, досягнувши потрібного результату, просто припинить подальший пошук відповідності. А це скорочення процесорного часу. Ще один плюс. Це читабельність. Коли ти дивишся конструкцію case або "if ... ifelse ... else" ти розумієш що це єдина обробка, і тут або небудь. І можеш банально забити на цей блок до потрібного моменту
Вибач за кілька невиразний текст: говорити ніколи нормально не вмів.
Думка ясна в принципі. Переписати у вигляді if {} elsif {} буде розумно.
Щоб домогтися скорочення процесорного часу, потрібно варіанти перебору вибудувати в імовірному послідовності, а не так, як вони зараз стоять.
У тому числі.
Ну ти реально жжош! Стільки коду, та ще й без нормальних пояснень!
Поки 3 + це максимум
Порада: пиши так, щоб людям було зрозуміло і цікаво, а не тільки тобі, дорогий аффтар!
Даремно. Я згоден що не найоптимальніший код - додавати коментарі гранично зрозумілі.
Ну не те, щоб код поганий, ні! Просто якось в нього занадто різко в'їхали, що називається, без попередніх ласк
. Потрібно було в попередніх постах якось розшарити цю інформацію, щоб навіть чайнику (яким я вже не є) було все зрозуміло. А от у мене питання та питання ...
Звичайно, тільки автор на самому початку обмовився про те, що він вивчив php саме на через бажання написати плагін. IMHO для малодосвідченого програміста - стаття нічого.
Зробив усе за прикладами, до створення сторінки. Вирішив перевірити. При активації плагіна з'являється повідомлення: "Плагін справив при активації 292 символів несподіваного висновку. ... "
Notepad + +, UTF-8 без BOM
WP 3.1.1
3.1.1 у мене немає. Останнє, на чому перевіряв - 2.9.2.
У процесі написання цих нотаток я робив плагін, який у мене зараз працює на версії 3.1. ( ). Можете з ним порівняти, буде помилка чи ні.
Все простіше. CR LF після?>
Уважніше треба бути