Click

Пишемо плагін для WordPress. Створення сторінки налаштувань плагина (частина 4)

Зміст до курсу створення плагіна для WordPress

Показати зміст »

  1. Введення, загальна інформація (Напишемо плагін для WordPress. Часть1.)
  2. Загальна теорія (Напишемо плагін для WordPress. Частина 2.)
  3. Підготовка до створення сторінки налаштувань (Напишемо плагін для WordPress. Частина 3.)
  4. Створення сторінки налаштувань плагина (Напишемо плагін для WordPress. Частина 4.)
  5. Функціональна складова (Напишемо плагін для WordPress. Частина 5.)
  6. Інтернаціоналізація і русифікація (Напишемо плагін для WordPress. Частина 6.)
  7. Додавання в репозиторій WordPress.org (Напишемо плагін для WordPress. Частина 7.)
  8. Файл з вихідним кодом плагина для 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 Як і раніше доступний для скачування файл плагіна, вже оновлений.

Ще на схожі теми:

Category Рубрики: seo , Блогінг , Кодинг | Tag Мітки: , , , , , | Comments 11 коментарів

Comments

11 коментарів to "Пишемо плагін для WordPress. Створення сторінки налаштувань плагина (частина 4) "

  1. ArNic пише:

    Взагалі клевое опис. Але надалі рекомендую використовувати або "case" - або конструкцію "if ... ifelse ... else"
    Чому? Ну чисто для сприйняття.
    Зрозуміло що в тебе обробка змінної $ cmd йде - але знаєш, зрозуміліше буде якщо ці всі обробки будуть єдиним цілим, а не окремими умовами. До речі тут ще є один момент: продуктивність
    Тому як у твоєму випадку код барибир (все одно) перевірятиме всі умови. Але застосувавши запропоновану конструкцію код, досягнувши потрібного результату, просто припинить подальший пошук відповідності. А це скорочення процесорного часу. Ще один плюс. Це читабельність. Коли ти дивишся конструкцію case або "if ... ifelse ... else" ти розумієш що це єдина обробка, і тут або небудь. І можеш банально забити на цей блок до потрібного моменту :)
    Вибач за кілька невиразний текст: говорити ніколи нормально не вмів.

    • dimio пише:

      Думка ясна в принципі. Переписати у вигляді if {} elsif {} буде розумно.
      Щоб домогтися скорочення процесорного часу, потрібно варіанти перебору вибудувати в імовірному послідовності, а не так, як вони зараз стоять.

  2. Іларіон пише:

    Ну ти реально жжош! Стільки коду, та ще й без нормальних пояснень! :-) Поки 3 + це максимум :-) Порада: пиши так, щоб людям було зрозуміло і цікаво, а не тільки тобі, дорогий аффтар!

    • ArNic пише:

      Даремно. Я згоден що не найоптимальніший код - додавати коментарі гранично зрозумілі.

      • Іларіон пише:

        Ну не те, щоб код поганий, ні! Просто якось в нього занадто різко в'їхали, що називається, без попередніх ласк :-) . Потрібно було в попередніх постах якось розшарити цю інформацію, щоб навіть чайнику (яким я вже не є) було все зрозуміло. А от у мене питання та питання ...

        • ArNic пише:

          Звичайно, тільки автор на самому початку обмовився про те, що він вивчив php саме на через бажання написати плагін. IMHO для малодосвідченого програміста - стаття нічого.

  3. Shua пише:

    Зробив усе за прикладами, до створення сторінки. Вирішив перевірити. При активації плагіна з'являється повідомлення: "Плагін справив при активації 292 символів несподіваного висновку. ... "
    Notepad + +, UTF-8 без BOM
    WP 3.1.1

    • dimio пише:

      3.1.1 у мене немає. Останнє, на чому перевіряв - 2.9.2.
      У процесі написання цих нотаток я робив плагін, який у мене зараз працює на версії 3.1. ( [Посилання] ). Можете з ним порівняти, буде помилка чи ні.

Leave a Reply