Пишем плагин для WordPress. Функциональная составляющая (часть 5)

plugins-wordpress

И снова поговорим о том, как написать для блог-движка WordPress свой плагин. В прошлый раз мы остановились на том, что создали страницу настроек для плагина и добавили её в административную панель WordPress. Настало время перейти непосредственно к работе над самой незаметной, но, тем не менее, одной из самых важных частей плагина – его функционалом. Нам необходимо разработать процедуры, при вызове которых из плагина будут происходить заложенные в его проект действия.

Начнём.

Пишем функции для плагина WordPress

Собственно говоря, поскольку функциональная часть – дело абсолютно индивидуальное, я ограничусь простым примером. Функции моего wordpress плагина будут просто добавлять какое-то слово к заголовкам записей и/или какую-то фразу к содержимому записей.

Создание более сложных функций оставлю для знатоков php, мне же как-то ближе perl. Скажу только, что всегда можно поискать готовый плагин, имеющий в своём составе часть нужного нам функционала, и, если он лицензирован под свободной лицензией, скопировать функции оттуда и переработать их под себя. Текст лицензии, как правило, прилагается к плагину. В крайнем случае в файле плагина будет указано название лицензии, под которой он распространяется.

Функция модиикации заголовка и тела WordPress-публикаций

Напишем и разберём функцию, занимающуюся в нашем плагине непосредственно модификацией заголовка и содержимого публикаций в WordPress-блоге.

function mod_content($title, $content){
if (get_option('myplug_modify_title')) {
$title = $title . myplugin_get_phrase($ph_type = "title");
}
if (get_option('myplug_modify_content')) {
$content = $content . myplugin_get_phrase($ph_type = "body");
}
return $title;
return $content;
}

Данная функция получает заголовок и тело записи и затем, если на странице настроек плагина была указана соотвтетствующая опция, обрабатывает полученные данные. В нашем случае – приклеивает в конец заголовка/тела wordpress-публикации случайную фразу, взятую из таблицы настроек плагина.
Затем изменённые (или оставшиеся неизменными) заголовок и тело записи возвращаются назад в движок.

Функция получения случайной фразы из таблицы настроек плагина

А теперь попробуем написать функцию плагина, получающую случайные фразы из таблицы настроек, хранящейся в БД нашего WordPress-блога.


function myplugin_get_phrase($ph_type){
global $wpsig_sig_table, $wpdb;
$sql = "SELECT '$ph_type' FROM $myplugin_prefs_table ORDER BY RAND() LIMIT 1";
$phrase = $wpdb->get_var($sql);
return $phrase;
}

Эта функция, будучи вызванной, получает на входе имя столбца в таблице БД, из которого нужно взять некое случайное значение. Запрос на выборку организован примитивно и абсолютно неоптимально. При наличии большого количества данных в таблице конструкция сортировки ORDER BY RAND будет достаточно сильно тормозить, но я не предполагаю для совего плагина раздутой таблицы в БД и потому пременяю такой вид соритовки. LIMIT 1, кстати, вернёт нам первое значение из сформированного списка записей.

Если вы собираетесь обрабатывать сколь-нибудь серьёзное количество данных в таблице – обработку вывода необходимо с mySQL переложить на php. То есть получив массив значений при помощи запроса к базе, затем обработать этот массив внутри своего плагина.

Функции WordPress для работы с БД mySQL

Механизм WordPress предоставляет несколько способов (методов) получения информации из БД:

  1. $wpdb->get_results($sql, $type); – получение всех строк результата запроса, где $type может принимать следующие значения:
    • OBJECT – данные возвращаются в виде массива, где каждый элемент является объектом, а его поля – это поля вашей таблицы в БД;
    • ARRAY_A – данные возвращаются в виде ассоциативного массива (хэша);
    • ARRAY_N – каждая строка данных представлена в виде нумерованного массива, каждому полю будет присвоен числовой индекс (по порядку расположения полей в таблице БД).
  2. $wpdb->query($sql); – метод для выполнения так называемых “простых” запросов, применяется для обработки запросов INSERT, UPDATE, DELETE.
  3. $wpdb->get_row($sql, $type, $offset); – получение одной строки из всего результата запроса, где:
    • $type – см. выше;
    • $offset – номер строки, которая будет выбрана из всего результата (хинт: можно генрировать $offset случайным образом и получать случайную строку из запроса).
  4. $wpdb->get_var($sql, $col_offset, $row_offset); – этот метод позволяет получить одно значение из всего результата запроса, соответственно:
    • $col_offset – см. выше;
    • $row_offset – номер столбца, из которого будет взят результат.

    Таким образом, сгенерировав случайные номера строки и столбца, можно получить из базы случайное значение.

Написание плагина для WordPress почти закончено

Что ж, вот мы и рассмотрели функциональную часть плагина. В принципе, он уже должен быть работоспособен. Нам осталось только интернационализировать наш плагин и познакомиться с порядком его добавления в репозитории wordpress.org.
Этим мы и займёмся в следующих выпусках руководства “Как написать плагин для WordPress“, а пока по-прежнему можно сохранить файл с плагином-примером.

Всем удачи! 🙂

Другие заметки по созданию плагина для WordPress

<-- Часть 4. Создание страницы настроек плагина в админке WordPress
Часть 6. Интернационализация и русификация плагина WordPress –>
Общее оглавление к циклу заметок по созданию плагина для WordPress

13 мыслей о “Пишем плагин для WordPress. Функциональная составляющая (часть 5)”

  1. Интересно, если текст c вашего сайта себе копировать, ссылку куда лучше ставить прямо на эту запись блога или же на главную страницу.

  2. Привет!
    Я плагинов не писал к вордпресу, но что-то мне подсказывает, что здесь ошибочка:
    function mod_content($title, $content){
    if (get_option(‘myplug_modify_title’)) {
    $title = $title . myplugin_get_phrase($ph_type = “title”);
    }
    if (get_option(‘myplug_modify_content’)) {
    $content = $content . myplugin_get_phrase($ph_type = “body”);
    }
    return $title;
    return $content;
    }
    Я так думаю, return ни один не нужен. Скорее всего переменные передаются по ссылке. Второй ретурн вообще не отработает никогда.

  3. Страница с 4-й частью курса не отображается. Пичаль 🙁
    Пытаюсь разобраться по исходнику.
    В примере вызвала сомнение строка $$myplugin_opt = get_option($myplugin_opt)
    Точно два знака $ в имени переменной ?

    1. Точно два. Это объявление новой переменной, именем которй будет значение старой. Например:

      $var1 = 'var2';
      $$var1 = 'test';
      echo $var2;
      -------------------
      test

      Четвёртую часть починил, спасибо, что сообщили.

    2. У вас в $myplugin_opt будет лежать название опции. Если вы прямо туда запишете её значение – затрётся название. А так – будет связанная переменная со значением. Я бы изобразил это так:
      $var = { 'имя' => 'значение' }
      И в дальнейшем можно обращаться к значению переменной по имени.

  4. Попробовал поставить плагин в Вордпресс. При попытке активации вызывает фатальную ошибку:(

    1. Проблему устранил, в WP 3.2.1 проверил – нормально активируется.
      Кстати для поиска ошибок рекомендую на время отладки в php.ini выставить:
      display_errors = On
      Тогда не придётся в логи лазать, сразу будет выдавать описание ошибки и строку, в которой она произошла.

  5. Спасибо за статью, интересная, вот еще одна статья ( [ссылка] ), которая поможет начинающим на примере разобраться с плагинописанием под WordPress.

  6. Спасибо за статью. Пытаюсь написать свой первый плагин, но кроме вывода фразы в начале поста, хочу завязаться на теги внутри этого самого поста. Не подскажите, как это можно сделать?

Добавить комментарий для Дмитрий Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *