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 );
    ?>
        <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://www.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. По-прежнему доступен для скачивания файл плагина, уже обновлённый.

Еще на похожие темы:

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 именно на из-за желания написать плагин. I.M.H.O. для малоопытного программиста – статья ничего.

  3. Shua пишет:

    Сделал все по примерам, до создания страницы. Решил проверить. При активации плагина появляется сообщение: “Плагин произвёл при активации 292 символов неожиданного вывода. …”
    Notepad++, UTF-8 без BOM
    WP 3.1.1

    • dimio пишет:

      3.1.1 у меня нет. Последнее, на чём проверял – 2.9.2.
      В процессе написания этих заметок я делал плагин, который у меня сейчас работает на версии 3.1. ([ссылка]). Можете с ним сравнить, будет ошибка или нет.

Leave a Reply