Click

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

plugins-wordpress

Оглавление к курсу создания плагина для 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

Собственно говоря, поскольку функциональная часть – дело абсолютно индивидуальное, я ограничусь простым примером. Функции моего 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“, а пока по-прежнему можно сохранить файл с плагином-примером.

Всем удачи! :)

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

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

Comments

11 комментариев to “Пишем плагин для 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. Vitalick пишет:

    Спасибо за статью! очень пригодилась :)

  4. Shua пишет:

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

    • dimio пишет:

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

      1
      2
      3
      4
      5
      $var1 = 'var2';
      $$var1 = 'test';
      echo $var2;
      -------------------
      test

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

    • dimio пишет:

      У вас в

      1
      $myplugin_opt

      будет лежать название опции. Если вы прямо туда запишете её значение – затрётся название. А так – будет связанная переменная со значением. Я бы изобразил это так:

      1
      $var = { 'имя' => 'значение' }

      И в дальнейшем можно обращаться к значению переменной по имени.

  5. Shua пишет:

    Век живи – век учись :) Про $$ не знал, интересная особенность языка

  6. Yuri пишет:

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

    • dimio пишет:

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

  7. Марк пишет:

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

Leave a Reply