И снова поговорим о том, как написать для блог-движка 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 предоставляет несколько способов (методов) получения информации из БД:
-
$wpdb->get_results($sql, $type);
— получение всех строк результата запроса, где $type может принимать следующие значения:- OBJECT — данные возвращаются в виде массива, где каждый элемент является объектом, а его поля — это поля вашей таблицы в БД;
- ARRAY_A — данные возвращаются в виде ассоциативного массива (хэша);
- ARRAY_N — каждая строка данных представлена в виде нумерованного массива, каждому полю будет присвоен числовой индекс (по порядку расположения полей в таблице БД).
-
$wpdb->query($sql);
— метод для выполнения так называемых «простых» запросов, применяется для обработки запросов INSERT, UPDATE, DELETE. -
$wpdb->get_row($sql, $type, $offset);
— получение одной строки из всего результата запроса, где:- $type — см. выше;
- $offset — номер строки, которая будет выбрана из всего результата (хинт: можно генрировать $offset случайным образом и получать случайную строку из запроса).
-
$wpdb->get_var($sql, $col_offset, $row_offset);
— этот метод позволяет получить одно значение из всего результата запроса, соответственно:- $col_offset — см. выше;
- $row_offset — номер столбца, из которого будет взят результат.
Таким образом, сгенерировав случайные номера строки и столбца, можно получить из базы случайное значение.
Написание плагина для WordPress почти закончено
Что ж, вот мы и рассмотрели функциональную часть плагина. В принципе, он уже должен быть работоспособен. Нам осталось только интернационализировать наш плагин и познакомиться с порядком его добавления в репозитории wordpress.org.
Этим мы и займёмся в следующих выпусках руководства «Как написать плагин для WordPress«, а пока по-прежнему можно сохранить файл с плагином-примером.
Всем удачи! 🙂
Другие заметки по созданию плагина для WordPress
<-- Часть 4. Создание страницы настроек плагина в админке WordPress |
Часть 6. Интернационализация и русификация плагина WordPress —> |
Общее оглавление к циклу заметок по созданию плагина для WordPress |
Интересно, если текст c вашего сайта себе копировать, ссылку куда лучше ставить прямо на эту запись блога или же на главную страницу.
Лучше на запись.
Привет!
Я плагинов не писал к вордпресу, но что-то мне подсказывает, что здесь ошибочка:
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 ни один не нужен. Скорее всего переменные передаются по ссылке. Второй ретурн вообще не отработает никогда.
Спасибо за статью! очень пригодилась 🙂
Страница с 4-й частью курса не отображается. Пичаль 🙁
Пытаюсь разобраться по исходнику.
В примере вызвала сомнение строка $$myplugin_opt = get_option($myplugin_opt)
Точно два знака $ в имени переменной ?
Точно два. Это объявление новой переменной, именем которй будет значение старой. Например:
$var1 = 'var2';
$$var1 = 'test';
echo $var2;
-------------------
test
Четвёртую часть починил, спасибо, что сообщили.
У вас в
$myplugin_opt
будет лежать название опции. Если вы прямо туда запишете её значение — затрётся название. А так — будет связанная переменная со значением. Я бы изобразил это так:$var = { 'имя' => 'значение' }
И в дальнейшем можно обращаться к значению переменной по имени.
Век живи — век учись 🙂 Про $$ не знал, интересная особенность языка
Попробовал поставить плагин в Вордпресс. При попытке активации вызывает фатальную ошибку:(
Проблему устранил, в WP 3.2.1 проверил — нормально активируется.
Кстати для поиска ошибок рекомендую на время отладки в php.ini выставить:
display_errors = On
Тогда не придётся в логи лазать, сразу будет выдавать описание ошибки и строку, в которой она произошла.
Спасибо за статью, интересная, вот еще одна статья ( [ссылка] ), которая поможет начинающим на примере разобраться с плагинописанием под WordPress.
Спасибо за статью. Пытаюсь написать свой первый плагин, но кроме вывода фразы в начале поста, хочу завязаться на теги внутри этого самого поста. Не подскажите, как это можно сделать?
Разбор тегов внутри записи можно тут посмотреть: http://dimio.org/biblioteka-dlia-wordpress-kak-sdelat-svoe-failohranilische.html