Пишем плагин для 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 не будет опубликован. Обязательные поля помечены *